问题标签 [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 投票
1 回答
190 浏览

security - 一个进程应该有什么权限来激活进程外 COM 服务器

我有一个第 3 方进程外 COM 服务器和一个试图激活它的客户端程序。我创建了两个:在 C# 和 C++ 上。当我使用 Ctrl-F5(以提升模式启动)从 VS2010 启动我的客户端程序(其中任何一个)时,客户端无法激活 COM 服务器。我收到“类未注册”错误。当我从命令行/Windows 资源管理器启动客户端时,客户端成功地执行了活动 COM 服务器。

所以我有一个 exe 模块,它在一种情况下工作(激活 COM 服务器),而在另一种情况下不工作(不活动 COM 服务器)。后一种情况是从 VS2010 运行模块时(不在调试中,仅通过 Ctrl-F5)。

这使我认为权限存在一些问题,因为模块在由 vs2010 启动时会继承其权限。

在 processprivileges.codeplex.com 的帮助下,我获得了两组权限:它不起作用的情况:IncreaseQuota => Disabled
Security => Disabled
TakeOwnership => Disabled
LoadDriver => Disabled
SystemProfile => Disabled
SystemTime => Disabled
ProfileSingleProcess = > Disabled
increaseBasePriority => Disabled
CreatePageFile => Disabled
Backup => Disabled
Restore => Disabled
Shutdown => Disabled
Debug => Enabled
SystemEnvironment => Disabled
ChangeNotify => Enabled RemoteShutdown =
>已禁用
Undock = > Disabled
ManageVolume => Disabled
Impersonate => Enabled
CreateGlobal => Enabled
increaseWorkingSet => Disabled
TimeZone => Disabled
CreateSymbolicLink => Disabled

当它工作时: Shutdown => Disabled
ChangeNotify => Enabled
Undock => Disabled
increaseWorkingSet => Disabled
TimeZone => Disabled

我看不到任何与 COM 激活相关的可疑特权。但我没有看到任何其他原因。

为什么进程外 COM 服务器在一种情况下被成功激活,而在另一种情况下没有被激活?

0 投票
1 回答
574 浏览

c# - Windows 服务启动进程外 COM 服务器 - CSIDL_APPDATA 作为不同的用户路径返回

我有一个用 C# 编写的 Windows 服务。此服务产生许多 MTA 线程。在这些线程中的每一个中,都会实例化一个进程外 COM 类。我将服务设置为以我当前的用户身份运行(添加适当的登录凭据)。当服务启动时,它从任务管理器中显示它正在以我的用户身份运行。如果该服务检查本地漫游用户目录,它会按预期返回我的用户目录。当我作为进程外 exe 运行的 COM 类执行此检查时,它会返回 Windows\System32\Config\systemprofile\AppData\Roaming 中的路径。

任何人都可以了解这里发生了什么,更具体地说,我怎样才能让进程外服务器作为服务用户运行。我已经签入了任务管理器,根据任务管理器,exe 以与服务相同的用户(在同一会话中)运行。

不确定操作系统是否是一个因素,但我在 Vista 32 (sp2) 和 Win7 64 (sp1) 上都看到了这一点

0 投票
3 回答
1891 浏览

com - .NET 进程外 COM 对象在 API 调用中共享静态实例

很难解释我们的处境。

我们有一个 3 层应用程序。该引擎是一个用 C++ 编码的 DLL,然后我们有一个通过 API 调用访问引擎的 VB6 ActiveX EXE,在顶层我们有一个 Excel 插件(在 C# 中使用 VSTO 框架)调用中间层与一个互操作 DLL . 此时,从插件到引擎的每个“连接”都会创建一个新的 EXE(VB6 使用 API 调用来访问引擎)并且一切正常。现在我们将中间层移动到 .NET,它“可能”工作得很好(它通过了我们所有的单元测试)但是,当我们同时打开 2 个“连接”时我们发现了一个错误(ups,没有单元测试检查这种情况因为这是一种新的行为)。DLL 具有静态对象,它在同一进程中的所有实例上共享,并且我们在“连接”之间进行交互。在我们的旧版本中,每个“连接”

按照这个问题的提示。我们尝试在 C# 中构建一个 COM EXE 以在中间层执行进程外对象,但结果相同。它们共享静态对象,最后,每个连接都不会创建一个独立的进程。

将 API 调用移动到 ATL 或将静态对象更改为具有句柄的可实例化引用并更改所有 API 调用以获取/设置此处理程序,这很清楚,但目前无法负担得起。我查看了MS All-in-one 中的所有示例,但没有找到任何解决方案。一次只保留一个连接也不可能,每个工作簿都可以有一个连接,并且将来我们希望探索同时具有多个连接的 Web 应用程序。

有什么建议吗?

提前致谢,

0 投票
1 回答
399 浏览

asp.net - 识别要为进程外会话标记为可序列化的类

我们正在尝试退出进程以获取会话状态,当然,我们需要将我们打算存储在会话中的类标记为可序列化。

有没有办法自动确定哪些类应该被标记为可序列化,而不需要对站点进行全面的回归测试来通过黄屏将它们清除掉?

0 投票
1 回答
1298 浏览

asp.net - 查看正在运行的 ASP.NET 应用程序的会话中的对象

我正在尝试将我的应用程序移动到进程外会话状态并且找不到哪个会话对象无法序列化 - YSOD 堆栈跟踪未显示。

是否可以查看当前存储在正在运行的应用程序的会话状态中的对象,或者至少是对象的类型?由于没有将调试器附加到正在运行的应用程序并提供其源代码,我不知道这是否可能。

我正在使用 Alachisoft NCache,所以这是他们的堆栈跟踪,虽然它没有帮助:

更新

我使用 SQL Server 会话状态得到了相同的结果:

0 投票
2 回答
600 浏览

c# - 在另一个进程中运行时从一个进程调用活对象

不太清楚如何问这个问题,因为我真的不知道我在说什么。我有两个 DLL (.NET),每个都是在两个不同的应用程序进程中运行的插件,即应用程序一加载 DLL 一,应用程序二加载 DLL 二。我希望这些 DLL 能够在加载时进行通信。在每个 DLL 中,我知道宿主进程将实例化的确切类,并且我希望每个进程中的这两个活动对象能够通信(相互调用方法)。这似乎是可能的。有没有人做过这样的事情?

0 投票
1 回答
526 浏览

java - mac(vlcj)上的进程外视频播放器

我一直在使用 VLCJ 在同一个窗口中嵌入多个媒体播放器 - 在 Windows 和 Linux 上这工作正常,因为它们可能不在进程中(它们需要保持稳定 - 简而言之,因为下面的本机库没有办法解决这个问题),只是在另一个过程中改变窗口。

但是,这种进程外方法是否适用于 MacOS?我发现的信息似乎表明它在 Windows / Linux 上是不可能的,但可能有一些本机调用可以从一个进程进行,以允许它被另一个进程控制。是这样吗,如果是这样,是否有任何关于可能允许出现这种情况的本机代码的更多信息?为稀疏的信息道歉,我目前没有可用于测试的 Mac,所以无法运行任何东西来尝试它,看看会发生什么!

0 投票
4 回答
8447 浏览

c# - COM 互操作,客户端在进程外 COM 中找不到接口

我使用 Microsoft 的CSExeCOMServer作为设置进程外 COM 服务器的基础,但它无法正常工作。服务器是 64 位的,客户端是 32 位的。

这是示例界面

和班级

程序运行,但是当客户端连接时,在服务器触发 ObjectClassFactory 上的 CreateInstance 后客户端崩溃,并使用 Marshal.GetComInterfaceForObject(new XXCryptService(), typeof(IXXCryptService)) 返回 ppvObject 上的对象并返回 0。

在 .NET 上运行客户端会触发“无法将“COMTest.XXCryptService”类型的 COM 对象转换为接口类型“COMTest.IXXCryptService”。此操作失败,因为对具有 IID 的接口的 COM 组件调用 QueryInterface '{6990FF5F- 22E2-4032-8B98-36115DBCEFFF}' 由于以下错误而失败:未找到元素。(来自 HRESULT 的异常:0x8002802B(TYPE_E_ELEMENTNOTFOUND))。”。

在 Delphi 上运行客户端会在 EIntfCastError 中触发异常,并显示消息“不支持接口”。COM 使用“导入类型库”导入并像这样使用。

TLB接口长这样

我检查了注册表,似乎一切都正确注册了,所以我不明白为什么我会遇到这个问题。

这里的任何人都知道可能是什么问题?

编辑:以 64 位编译客户端并且工作正常。此外,它引用了错误的路径,在我调整它之后,我在 .NET x86 客户端上遇到了不同的错误

此操作失败,因为 IID 为“{6990FF5F-22E2-4032-8B98-36115DBCEFFF}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:加载类型库/DLL 时出错。(来自 HRESULT 的异常:0x80029C4A (TYPE_E_CANTLOADLIBRARY))

0 投票
1 回答
547 浏览

winapi - 处理带有进程外 ActiveX EXE 的 Windows 关闭

我们有一个应用程序,它使用多个进程外 COM 对象来执行各种任务。如果用户在我们的应用程序运行时告诉 Windows 关闭,那么它会向所有应用程序(顶级窗口)发送关闭通知,但是 OoP COM 对象可以在通知父级之前关闭并有机会干净地关闭,导致不同组件中的各种错误。

这使情况变得更糟,因为创建了一个 OoP 对象来托管不稳定的第 3 方对象,因此它在崩溃时会自动重新启动,而现在由于 Windows 正在关闭而无法重新启动。

虽然我们可以处理父进程上的错误,但 ActiveX 主机是否有办法告诉 Windows“我还没有关闭,但会在适当的时候关闭”,或者更好的是,让 Windows 不通知它们第一名?

父进程、OoP 对象及其宿主都是 C++ 和 VB6 的混合体。

0 投票
0 回答
530 浏览

c# - 从 C# 中加载 ActiveX 控件的进程外

我有一个 C# 应用程序,它从 32 位 COM (ActiveX) DLL 加载组件(以及相关的帮助函数)。

这一切都很好,但我的处理非常占用内存(特别是在多处理器机器上运行时),所以我希望能够在进程外加载 ActiveX DLL。我的理解(尽管我的 COM 相当生疏)这将允许我直接从 64 位应用程序通过 DCOM 访问所有功能。

但是,似乎没有任何方法可以鼓励 VS2010 允许我在进程外加载 DLL。它会自动生成必要的胶水代码,并且似乎是通过相当于带有 CLSCTX_INPROC_SERVER 的 CoCreateInstance 来加载它的。有没有办法告诉它把它作为 CLSCTX_LOCAL_SERVER 加载(我相信它会在它自己的过程中启动它)?

编写我自己的包装器 DLL/EXE 包装 32 位 DLL 然后允许我将包装器加载为进程外服务器的唯一方法是什么?这样做的痛苦可能是无法以如此简单的方式使用该功能。

当然有更简单的方法吗?

任何帮助将不胜感激!