COM进程外服务器启动多个实例

use*_*314 6 com out-of-process

如何强制本地COM服务器在公共帐户下运行(本地系统会好)?RunAs文档似乎只适用于DCOM,并且不能在本地运行.

我面临的问题是我的CoCreateInstance是从在不同桌面上运行的进程调用的,而在这种情况下SCM想要为每个桌面启动一个新服务器,我只想要一个单一的实例 - 按照设计!

ese*_*elk 1

您所描述的是系统服务,而不是 COM 服务器。COM 服务器被设计为在运行它的任何会话下运行,而不是在“会话 0”(服务)或任何单个会话下运行。如果您需要仅在 1 个会话下运行并且可以全局访问其他所有内容的东西,您应该使用 Windows 服务,而不是 COM 服务器。

如果您出于其他原因需要 COM 服务器方面,但想要全局共享资源或仍然有“一个进程”来控制您需要执行的任何操作...您可以让 COM 服务器使用您喜欢的任何 IPC 方法与您的服务进行通信。

另外,在你的评论中你说“当我从命令行运行时”——如果你从命令行运行一个 EXE,它是否注册为 COM 服务器并不重要,它只是像任何服务器一样运行其他 EXE/应用程序——这意味着它以您运行它的任何用户身份运行,无论您在哪个会话中。将 EXE 注册为 COM 服务器只允许其他进程运行该 EXE 并通过 OLE/COM 与其进行通信,但是EXE 仍然可以作为普通应用程序运行。例如,Microsoft Word 和 Outlook 都是 COM 服务器。也就是说,outlook.exe 是一个 COM 服务器,但当然您也可以将其作为普通应用程序运行。