【问题标题】:Several Services exporting the same COM component多个服务导出相同的 COM 组件
【发布时间】:2011-06-06 13:03:23
【问题描述】:

根据这篇文章: http://msdn.microsoft.com/en-us/library/ms809975.aspx 您可以在服务中导出组件。

但是是否可以创建多个服务来导出同一组件的不同实例?

我发现一个潜在的问题是在定义 \HKEY_CLASSES_ROOT\AppID\\LocalService 时,因为每个服务都有不同的名称,我不能将它们都放在同一个键中。

谢谢

【问题讨论】:

    标签: c++ windows com service


    【解决方案1】:

    在链接的文章中非常明确地提到:

    不要使用 REGCLS_SINGLEUSE。 如果你使用这个注册失败 旗帜。操作系统允许一个 服务的单个实例。为了这 原因,COM 组件必须是 可供多个客户使用 同时。

    如果您想要多个实例,您必须使用常规的进程外服务器。

    【讨论】:

    • 呃,好的,效果如何?引用的关键点是您只能启动一次服务。
    • 我所做的是:CoGetClassObject(MyCLSID CLSCTX_INPROC_SERVER, NULL, IID_IClassFactory, (PVOID*)&pCF);以及后来的 CoRegisterClassObject(MyCLSID, pCF, CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE|REGCLS_MULTI_SEPARATE, &m_ckClassObj);
    • 我已经安装了具有 2 个不同名称的服务并且它可以工作,但在某些时候我有一个错误:The class is configured to run as a security id different from the caller。然后我将 \HKEY_CLASSES_ROOT\AppID\{CLSID}\LocalService 重命名为第一个服务的名称,启动它并将其重命名为第二个服务的名称,然后启动第二个服务,它就可以工作了。
    • 你有点靠自己的这些技巧。很难看出两项服务如何比一项服务做得更好。没有你给出任何理由,就没有好的方法可以给出更好的答案。
    • 在服务崩溃时只是一个稳定性问题,另一个仍然存在,因为两个服务都做互斥的工作,这应该不是问题。让所有作业在同一个服务上运行会使其变得脆弱,如果一个作业挂起,一切都会失败。
    【解决方案2】:

    【讨论】:

    • 不,这不涉及服务。
    • 哦,你是对的。我只是在考虑一般的本地服务器,而不是专门的 Win32 服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    相关资源
    最近更新 更多