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

6

如何强制让本地COM服务器运行在一个通用账户下(比如local system)?RunAs文档似乎只适用于DCOM且不能在本地使用。

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


这个问题是否更适合在 ServerFault 上提问? - Piccolo
DCOM也用于本地服务器。您尝试过使用“DCOM Config”并更改“Identity”吗? - sharptooth
当然可以,没有任何区别。我期望在任务管理器中看到SYSTEM,但是当我从命令行运行时,它仍然在我的ID下运行。 - user1371314
1个回答

1
你所描述的是一个系统服务,而不是COM服务器。COM服务器旨在在运行它的任何会话下运行,而不是在“会话0”(服务)或任何单个会话下运行。如果您需要仅在一个会话下运行并具有对其他所有内容的全局访问权限,则应使用Windows服务,而不是COM服务器。
如果您出于其他原因需要COM服务器方面,但仍希望全局共享资源或仍有“一个进程”来控制您需要执行的任何操作...您可以使用您喜欢的任何IPC方法使您的COM服务器与您的服务通信。
此外,在您的评论中,您说“当我从命令行运行时” - 如果您从命令行运行EXE,则无论它是否已注册为COM服务器,都无关紧要,它只会像任何其他EXE /应用程序一样运行 - 这意味着它以您运行它的任何用户身份,在您所在的任何会话中运行。将EXE注册为COM服务器仅允许其他进程运行该EXE并通过OLE / COM与其通信,但EXE仍然可以作为普通应用程序运行。例如,Microsoft Word和Outlook都是COM服务器。也就是说,outlook.exe是一个COM服务器,但当然您也可以将其作为普通应用程序运行。

谢谢,已经明白了。我已经转换成为 Windows 服务,现在工作得非常完美。 - user1371314

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接