进程外 EXE 的免注册 COM



我有几个组件(多个.dll,一个.exe(,我需要免费使用注册。在我的 sxs 清单中,我将 dll 文件列为;

<file name="xxx.dll"
<comClass
description="xxx component"
clsid="{xxx-xxx}"
threadingModel="Apartment" />
</file>

我已经创建并激活了一个激活上下文,并且可以在这些 dll 组件上调用CoCreateInstance();而不会出现问题。

但是,我还有一个需要运行的 COM 服务器单例(作为.exe(,我相信您只能将 dll 文件放在 sxs 清单中。我有它的CLSID。

我受到限制,因为使用 regsvr 不是一种选择,那么有没有其他方法可以实现这一点?理想情况下,在我创建这些其他组件的同一位置以编程方式完成所有操作。

那座桥太远了...尝试通过清单执行此操作。但是,您可以手动执行此操作。但是,您所要做的就是操作系统所做的事情。 您必须:

  1. 使用所有正确的命令行选项调用 CreateProcess((
  2. 在进程上调用 WaitForInputIdle((
  3. 进行 COM 调用

您可能还必须具有所用接口的条目(如果它们是自定义的(。如果可能的话,我可能会建议使它们与IDispatch兼容。

若要了解需要哪些命令行选项,必须在生成计算机上注册服务器,然后查找 CLSID 的 LocalServer32 注册表项并查看参数是什么。如果它们是 MFC 或 ATL,它们可能彼此略有不同,但通常 ATL 参数始终相同,除非您执行自定义操作。

如果由于某种原因 CreateObject(( 失败,那么你可能不得不在你创建的进程上调用 TerminateProcess((,否则你将有一堆孤立的进程。如果成功创建对象,则正常的 COM 引用计数应足以自动关闭服务器进程。

最新更新