ATL服务作为一个进程外的com

时间:2014-11-06 01:50:59

标签: windows com

背景: 我正在将遗留代码从WinXP迁移到Win7平台。我有一个托管COM对象的传统ATL Win32服务。我试图将它作为一个进程外的COM进程运行,并使用/ RegServer选项而不是/ Service注册它。在Run()部分我有

CoInitializeEx(NULL,COINIT_APARTMENTTHREADED); _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER,REGCLS_MULTIPLEUSE);

让我们讨论这个控制器

我有另一个服务,它在用户帐户下运行,而不是LocalSystem。此服务执行CoCreateInstance以实例化控制器对象。发生这种情况时,将在用户帐户下创建控制器进程的实例。让我们将此服务称为服务,供我们讨论。

现在我有另一个进程也可以使用CoCreateInstance来实例化控制器对象。让我们称之为代理。该代理应该通过脚本和命令行运行。

问题:每次我的计算机启动并且服务和代理都执行了一次,我看到2个Controller进程实例。我不明白为什么。是因为一个是服务而另一个是常规流程?我想要运行一个实例。

任何指针都会受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

好吧,我想我回答了我的问题。我似乎是session0隔离的受害者。服务创建的实例在Session0中运行,代理创建的实例在Session1中运行。因此2个实例。不知道有什么方法可以阻止这种情况,所以有时间重新设计这个:)