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

问题描述:

如何强制本地COM服务器在普通帐户下运行(本地系统是好的)? RunAs文档看起来像是它唯一的DCOM,并不在本地工作。COM进程外服务器启动多个实例

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

+0

这会是一个更好的拟合[ServerFault?](http://serverfault.com/) – Piccolo 2013-02-11 04:57:04

+0

DCOM用于本地服务器了。您是否尝试过使用DCOM配置并更改身份? – sharptooth 2013-02-11 07:22:53

+0

当然有,没有区别。我期望在任务管理器中看到SYSTEM,但是当我从命令行运行它仍然运行在我的ID – user1371314 2013-02-11 07:46:57

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

如果您需要其他原因,COM服务器方面,但要在全球范围内共享资源或还有“一个过程”控制任何你需要做的......你可以有你的COM服务器使用您的服务进行通信的任何你喜欢的IPC方法。

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

+0

谢谢,理解。我已经转换为Windows服务,这是完美的工作。 – user1371314 2014-08-28 03:05:04