我有几个组件(多个.dlls,一个.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不能实现这一点,所以有没有其他方法可以实现这一点呢?理想情况下,所有事情都在我创建这些其他组件的地方以编程方式完成。
发布于 2020-06-26 00:33:38
这也是一座桥,far...to试着通过清单来实现它。但是,您可以手动执行此操作。但是,你必须做的是操作系统所做的事情。您必须:
上调用WaitForInputIdle()
如果您使用的接口是自定义的,那么您可能还必须拥有这些接口的条目。如果可能的话,我可能会建议让它们与IDispatch兼容。
要了解哪些命令行选项是必需的,您必须在构建计算机上注册服务器,然后查找CLSID的LocalServer32注册表项,并查看参数是什么。如果它们是MFC或ATL,它们可能会略有不同,但通常ATL参数总是相同的,除非您执行自定义操作。
如果由于某种原因CreateObject()失败了,那么您可能不得不在您创建的进程上调用TerminateProcess(),否则您将会有一堆孤立的进程。如果成功创建了对象,则正常的COM引用计数应足以自动关闭服务器进程。
https://stackoverflow.com/questions/62515585
复制相似问题