问题标签 [out-of-process]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
162 浏览

.net - 带有事件处理的 .Net 服务组件

我正在尝试制作一个进程外的.Net DLL;使用示例代码,我可以制作一个进程外的 COM DLL。但是,我在实现事件处理时遇到了一些问题。

根据代码,组件公开以下事件:

在 VB.Net 表单应用程序中处理该事件会引发异常。以下是详细信息:

异常详情:

堆栈跟踪:

在 System.RuntimeMethodHandle.SerializationInvoke(IRuntimeMethodInfo 方法,对象目标,SerializationInfo 信息,StreamingContext 和上下文)在 System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(对象 obj,SerializationInfo 信息,StreamingContext 上下文)在 System.Runtime.Serialization.ObjectManager.FixupSpecialObject( ObjectHolder holder)在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)在 System.EnterpriseServices 的 System.Runtime.Serialization.ObjectManager.DoFixups()。 System.EnterpriseServices.ComponentServices.ConvertToMessage(String s, Object tp) 在 System.EnterpriseServices 的 ComponentSerializer.UnmarshalFromBuffer(Byte[] b, Object tp)。ServicedComponent.RemoteDispatchHelper(String s, Boolean& failed) 在 System.EnterpriseServices.ServicedComponent.System.EnterpriseServices.IRemoteDispatch.RemoteDispatchNotAutoDone(String s) 在 System.EnterpriseServices.IRemoteDispatch.RemoteDispatchNotAutoDone(String s) 在 System.EnterpriseServices.RemoteServicedComponent.Invoke(IMessage reqMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at VBServicedComponent.SimpleObject.add_FloatPropertyChanging(FloatPropertyChangingEventHandler obj) at TestApp.modMain.Main() in D:\Meridia\MeridiaAPI\COMPlusServices\TestApp \Module1.vb:第 34 行RemoteDispatchNotAutoDone(String s) at System.EnterpriseServices.IRemoteDispatch.RemoteDispatchNotAutoDone(String s) at System.EnterpriseServices.RemoteServicedComponentProxy.Invoke(IMessage reqMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at VBServicedComponent .SimpleObject.add_FloatPropertyChanging(FloatPropertyChangingEventHandler obj) 在 D:\Meridia\MeridiaAPI\COMPlusServices\TestApp\Module1.vb:line 34 中的 TestApp.modMain.Main()RemoteDispatchNotAutoDone(String s) at System.EnterpriseServices.IRemoteDispatch.RemoteDispatchNotAutoDone(String s) at System.EnterpriseServices.RemoteServicedComponentProxy.Invoke(IMessage reqMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at VBServicedComponent .SimpleObject.add_FloatPropertyChanging(FloatPropertyChangingEventHandler obj) 在 D:\Meridia\MeridiaAPI\COMPlusServices\TestApp\Module1.vb:line 34 中的 TestApp.modMain.Main()add_FloatPropertyChanging(FloatPropertyChangingEventHandler obj) 在 D:\Meridia\MeridiaAPI\COMPlusServices\TestApp\Module1.vb:line 34 中的 TestApp.modMain.Main()add_FloatPropertyChanging(FloatPropertyChangingEventHandler obj) 在 D:\Meridia\MeridiaAPI\COMPlusServices\TestApp\Module1.vb:line 34 中的 TestApp.modMain.Main()

内部异常:

堆栈跟踪:

在 System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblySecurityRef, Evidence assembly , RuntimeAssembly reqAssembly, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean for Introspection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean for Introspection) at System.Reflection.Runtime. InternalLoad(String assemblyString, 证据 assemblySecurity,StackCrawlMark& stackMark, Boolean for Introspection) at System.Reflection.Assembly.Load(String assemblyString) at System.Runtime.Serialization.FormatterServices.LoadAssemblyFromString(String assemblyName) at System.Reflection.MemberInfoSerializationHolder..ctor(SerializationInfo info, StreamingContext context)

在处理事件时,我在 TestApp 结束时有什么遗漏吗?如果是,那么处理此类事件的正确方法是什么?

提前致谢。

0 投票
0 回答
179 浏览

c# - 如何将我的 WPF 应用程序设置为 activex(进程外)

我有一个 wpf 应用程序。我想让它成为一个activex com组件(进程外),以便从其他应用程序(如Excel、VB等)中。我可以将我的WPF应用程序称为activeX com。

如何使我的 wpf 应用程序成为 activeX?

0 投票
1 回答
3699 浏览

c# - 从 64 位代码访问 32 位 DLL

我需要迁移 32 位 dll 才能在 64 位 C#(以及 C++)应用程序中使用它。dll 是用非托管的 delphi 代码编写的。我无法重新编译 dll,唯一的方法是使用进程间通信 (IPC)。我搜索了很长时间,但我发现的信息并不多。我发现的最佳指南在此链接中:Accessing 32-bit DLLs from 64-bit code

我遵循本指南来实现我的目标,因为这个论坛经常被引用。所以指南解释我必须做三个步骤:

1° STEP - 创建一个实现 COM 对象的 32 位组件,该对象加载和调用 32 位 DLL,并将 32 位 DLL 接口公开为 COM 接口。所以我做了和这里解释的一样的事情(例子取自上一个链接):

然后我必须注册 .NET COM 程序集,所以我必须使用 Regasm.exe,但我创建了 Visual Studio 安装和部署项目,它构建了一个 MSI 文件并让 Regasm 做同样的事情。然后我控制了注册表编辑器,我找到了 HKEY,所以它可以工作。所以直到这一步一切正常或似乎没问题。

2° 步骤 - 通过创建标准 COM+ OOP 应用程序(使用 dllhost 作为代理进程)将此 COM 组件配置为进程外 (OOP);

3° STEP - 创建一个 64 位包装 DLL,它实现与原始 32 位 DLL 相同的接口,导入上面创建的 COM 对象的 COM 接口,将对公开接口的当前调用转换为对 COM 对象接口的调用,传递调用参数,接收返回值并将它们委托给调用者;

问题是 2° 和 3° 步骤我不知道如何实现,因为我在网络或论坛上没有找到任何关于此的内容。所以我需要帮助来实现步骤 2° 和 3°。也可以链接到其他帖子等。在此先感谢。


其他信息(2016 年 12 月 10 日 - 晚上 11:10):此 DLL 通过两个接口将其函数公开给 32 位本机环境:1.) 带有函数指针 (WINAPI*) 的 C/C++ 标头 2.) .NET与 P/Invoke 的接口

0 投票
2 回答
121 浏览

c# - 两个程序之间最简单的服务器-客户端架构

我想编写两个简单的 C# 程序来来回传递值,但这两个程序将驻留在通过以太网电缆连接的两台单独的计算机上。实现这一目标的最佳架构是什么?进程外 COM 组件?DLL 代理?其他?

我对计算机之间的通信一无所知,所以希望有人能让我知道我应该阅读哪些内容以以最简单的方式实现我的目标。不需要扩展到更广泛的网络。

0 投票
1 回答
108 浏览

winapi - 如何判断 COM 是否启动了本地服务器进程?

我有一个支持进程外 COM 自动化的应用程序。现在,我希望它在由用户启动和由 COM 启动以服务自动化请求时能够表现不同。如何从应用程序中区分这些情况?

谷歌搜索没有给我带来任何东西,到目前为止我唯一的想法是确定父进程,但我不确定它会有多脆弱。

0 投票
0 回答
83 浏览

c# - 卡在 C# 中初始化 COM 进程外对象

我需要在我的 C# 应用程序中嵌入一个进程外 COM 执行。COM 执行是用 C++/ATL 编写的。有时我的 COM 创建过程不会启动,所以我设法使用超时来中断它。

我的 COM 对象初始化过程:

上面的代码似乎在达到超时时无法停止MyInitJob()线程,并且Initial()当新的 COM 对象被卡住时将永远挂起。

我能知道为什么new需要永远吗,当它需要太长时间时我可以打断吗?

0 投票
1 回答
34 浏览

c# - 其他用户模拟的进程外可执行文件没有语言切换能力?

我希望,我们看到的问题并不是那么独特。

首先,一些背景:我们正在使用 Process.Start(startInfo) 在不同的用户帐户(具有更高权限)下运行一些应用程序,而 C# 应用程序(各种 shell 启动器)已在有限特权用户帐户下启动,已登录-在。

我们在以更高权限启动的应用程序中使用 Alt + Shift 组合键在进程外切换不同语言时遇到问题。虽然最初的启动应用程序在切换键盘方面没有任何问题,但启动的应用程序没有这种能力。

我们已将语言键盘添加到模拟用户配置文件中,但没有发现任何变化,键盘开关不可用。我们还在 ProcessStartInfo 参数中添加了 LoadUserProfile = true ,但语言键盘切换仍然不起作用。在这一点上,我们需要帮助来识别和解决这个问题。这支持吗?如果是这样,我们如何在不同用户帐户下的单独进程中启动可执行文件并赋予用户切换键盘的能力?

如果在进程外启动可执行文件时 Windows 不支持此功能,是否可以通过编程方式提供这种语言切换功能以及如何提供?

0 投票
0 回答
365 浏览

c# - 在少数开发人员机器上使用“InProcess”托管模型时,.Net Core 2.2 应用程序找不到 appsettings 路径

.Net Core 2.2 应用程序在我的一个系统上使用“InProcess”托管模型时找不到 appsettings 路径,它仅在托管模型更改为“OutOfProcess”时才有效,是否有相同的应用程序需要不同配置不同机器的原因

我正在创建一个新的微服务,并且我的应用程序在 PROD/QA/DEV 服务器中运行良好,托管模型配置为“InProcess”。在调试模式下运行时,它会中断,因为它找不到 appsettings 路径。我尝试了第二台机器,它在第二台机器上运行良好,主机模型为“InProcess”。我错过了任何配置吗?这使它在不同系统上的工作方式不同?!

应用程序正在使用 Nuget 进行日志记录,当调用该 Nuget 时,它会从调用应用程序读取“RollingFile”路径。这里的问题是在使用“InProcess”托管时找不到 appsettings 路径的某些机器上!!

0 投票
0 回答
45 浏览

excel - 当所有未完成的引用都消失时,如何确保 Excel 将关闭

我的应用程序启动并自动执行 Excel:

现在我们要开始比赛了:

然后通常你可以.QuitExcel:

Excel 消失了。

输入用户控件

应该发生的是,如果我有代码:

然后,当最后一个未完成的引用消失时,Excel 应该会自动关闭。来自 MSDN:

Application.UserControl 属性 (Excel)

当对象的 UserControl 属性为False时,该对象会在对该对象的最后一次编程引用被释放时被释放。如果此属性为False,Microsoft Excel 会在会话中的最后一个对象被释放时退出。

我将提请注意上面文档中的重要行:

释放会话中的最后一个对象时 Microsoft Excel 退出

.UserControl为 false 时,Excel 应该会自动终止。

.UserControl属性默认为false。但即使我强制它为false ,当会话中的最后一个对象被释放时,进程外 Excel 自动化对象也不会退出:

在此处输入图像描述

更好地崩溃

如果在自动化时出现意外异常,这将成为一个问题。通常,为了很好地摆脱 Excel,您会:

  • 使其可见,并让用户关闭它:

    /li>
  • 或致电.Quit退出:

    /li>

除非出现灾难性问题,否则我没有机会打电话.Quit或打电话.Visible = true。在这些情况下,Excel 一直存在。在几天、几周和几个月的时间里,它有时可能意味着几十个。

当最后一个未完成的引用消失时,我能做些什么来确保 Excel 将关闭:

0 投票
1 回答
808 浏览

asp.net-core - asp.net core out-of-process 无法正确启动

我正在尝试使用 Azure 网站的 RunFromPackage 应用程序设置。

我正在使用以下堆栈

面向 .Net Framework 4.7.2 的 asp.net 核心(进程外)

而且我无法再让我的 Web 应用程序正常运行。当我点击网址时,我得到的只是

“该页面无法显示,因为发生了内部服务器错误。”

在回应中。

我已经使用 Kudu powershell 窗口和命令启动了我的应用程序

“.{应用程序名称}.exe”

它启动良好。没有错误或任何东西

查看事件查看器日志我看到的是

APPLICATION_MANAGER::~APPLICATION_MANAGER | 这=000001D1CD999A60 [TID 8872] [PID 8028]

打开失败的请求跟踪日志时,我看到以下相关信息

  1. URL_CACHE_ACCESS_START RequestURL="/favicon.ico" 15:37:30.729
  2. URL_CACHE_ACCESS_END PhysicalPath="", URLInfoFromCache="false", URLInfoAddedToCache="true", ErrorCode="操作成功完成。(0x0)" 15:37:30.729
  3. GENERAL_GET_URL_METADATA PhysicalPath="", AccessPerms="545" 15:37:30.729
  4. HANDLER_CHANGED OldHandlerName="", NewHandlerName="aspNetCore", NewHandlerModules="AspNetCoreModule", NewHandlerScriptProcessor="", NewHandlerType="" 15:37:30.729
  5. MODULE_SET_RESPONSE_ERROR_STATUS

Warning ModuleName="IIS Web Core", Notification="BEGIN_REQUEST", HttpStatus="500", HttpReason="Internal Server Error", HttpSubStatus="0", ErrorCode="Access is denied. (0x80070005)", ConfigExceptionInfo=" "

我试图打开 asp.net 核心模块日志记录,但我没有得到任何日志文件。我也尝试打开 stdoutlog,但似乎没有任何记录。

这是我的 web.config 的副本

我不确定发生了什么。我只能收集到 IIS 模块出了点问题。从错误消息看来,它无法读取或处理我的 web.config ErrorCode="Access is denied."

奇怪的是,我之前构建的应用程序已启动并运行。我试图隔离可能破坏站点的更改,但我似乎无法找出导致此问题的原因。