3

我想使用清单来指定对 COM 服务器的依赖关系(无 reg-free COM)。

消费者应用程序在没有 COM 服务器的情况下大部分都可以正常工作 - 只有 1.7% 的功能使用 COM 服务器。因此,在普通旧的regsvr32情况下,它会开始并正常工作,直到用户做一些会触发CoCreateInstance()调用的事情,此时消费者会收到一条错误消息。

现在我已经玩了一段时间的清单,看起来消费者甚至不会启动,除非它所依赖的 COM 服务器程序集存在于文件系统中。那不好。

我添加了具有以下内容的“附加清单”:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <dependency>
       <dependentAssembly>
           <assemblyIdentity
              type="win32"
              name="TheComServer.X"
              version="1.0.0.0"/>
       </dependentAssembly>
   </dependency>
</assembly>

有没有办法将无注册 COM 与清单一起使用并使依赖项可选 - 以便消费者程序启动并正常工作,直到CoCreateInstance()实际调用?

4

1 回答 1

3

您将必须至少为无 reg 的 COM 程序集提供清单。

应用程序清单引用应用程序需要的程序集 - 组件清单在应用程序启动时处理 - 并指定程序集导出的 com 对象。

必须在加载激活上下文时指定它们。

您可以使用激活上下文 API 手动创建激活上下文并将程序集加载到其中 - 然后在您尝试 CoCreateInstance 时确保该上下文是当前的。

于 2010-05-24T18:14:03.110 回答