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

COM进程外服务器启动多个实例,com,out-of-process,Com,Out Of Process,如何强制本地COM服务器在公共帐户下运行(本地系统可以)?RunAs文档似乎只针对DCOM,在本地不起作用 我面临的问题是,我的CoCreateInstance是从运行在不同桌面上的进程调用的,在这种情况下,SCM希望为每个桌面启动一个新的服务器,我只需要一个实例-按设计 您所描述的是系统服务,而不是COM服务器。COM服务器设计为在运行它的任何会话下运行,而不是在“会话0”(服务)或任何单个会话下运行。如果您需要只在一个会话下运行的东西,并且对其他所有东西都具有全局访问权限,那么您应该使用Wi

如何强制本地COM服务器在公共帐户下运行(本地系统可以)?RunAs文档似乎只针对DCOM,在本地不起作用


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

您所描述的是系统服务,而不是COM服务器。COM服务器设计为在运行它的任何会话下运行,而不是在“会话0”(服务)或任何单个会话下运行。如果您需要只在一个会话下运行的东西,并且对其他所有东西都具有全局访问权限,那么您应该使用Windows服务,而不是COM服务器

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


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

这是否更适合用于本地服务器的DCOM。您是否尝试过使用
DCOM配置
并更改
标识
?当然尝试过,没有任何区别。我希望在任务管理器中看到系统,但当我从命令行运行时,它仍然在我的IDM下运行。谢谢,明白了。我已经转换到Windows服务,它工作得很好。