注册免费Com和dll清单

我正在设置注册免费的COM,但有一个小问题,我的另一个COM对象可能是客户端.

App.exe —–> COM Server / Client dll(已注册或不注册)——–> COM Server DLL(未注册)

我的问题是,是否可以为第二个dll(COM Server / Client dll)创建一个清单?我无法控制可执行文件,但是如果我这样做,如果我为可执行文件创建了客户端清单,并且为COM服务器dll创建了一个服务器清单.

这是中间dll的清单文件.我尝试嵌入它并尝试外部.仍然不行.

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

进一步的调查,只要中间的dll也是免费注册,我可以得到这一切工作,并且exe有一个应用程序清单.一旦我注册中间的dll,并放弃应用程序清单(我没有控制什么exe将使用我的dll),整个事情停止工作.

如果exe没有明示,那么dll的清单不被考虑.我可以通过设置一切工作来证明这一点.然后把错误放在装配单上.这会弹出通常的消息:

无法创建进程:由于应用程序配置不正确,此应用程序无法启动.重新安装应用程序可能会解决此问题.

如果我删除应用程序清单,应用程序将加载(尽管CoCreateInstance失败,因为不考虑依赖关系)

只需向服务器/客户端dll的清单添加指向com服务器dll的程序集依赖关系.

请记住,程序集清单与“应用程序”清单不同:程序集清单描述一个程序集:给出一个名称,并列出其dll.
应用程序清单是RT_MANIFEST嵌入式资源,它描述当前的模块依赖关系.

所以归根结底,你会有:

> app.exe,具有外部(app.exe.manifest)或嵌入式RT_MANIFEST,描述了一个名为“acme.clientserver”的程序集的依赖关系
> acme.clientserver.manifest描述一个程序集,并列出“clisrv.dll”作为注册免费软件.
> clisrv.dll,具有外部(clisrv.dll.2.manifest)或嵌入式RT_MANIFEST,描述了一个名为“acme.server”的程序集的依赖关系
> acme.server.manifest,描述一个程序集,将serv.dll列为免费注册表.
> serv.dll – 它可能或可能不会再有一个清单列出更多的依赖程序集.

在技​​术上可以通过dll的名称调用程序集,并且将程序集和dll清单合并在一起 – win32加载程序支持这一点,但是在程序清单中有效的某些设置在程序集清单中无效,这可能导致结果装配失败.它也使得数字签名非常困难.

WRT的exe必须有一个清单:通常exe的清单设置进程默认激活上下文.我不是100%肯定当EXE没有清单时窗口的行为,但我很确定,dll中的清单仍将被处理.

这意味着问题归结为在CoCreateInstance中缺少隔离支持 – 由于某些原因 – 默认情况下,CoCreateInstance仅查看reg free com条目的默认激活上下文.

覆盖它的方法是使用Activation Context API手动构建您自己的激活上下文

基本的方法是调用:

> CreateActCtx – 从您的dlls清单创建激活上下文.
> ActivateActCtx – 激活上下文
> CoCreateInstance – 现在将搜索当前的激活上下文以获取免费的com条目.
> DeactivateActCtx – 恢复默认激活上下文.

您可以添加/ D ISOLATION_AWARE_ENABLED来包装由激活上下文影响的大多数Windows调用,由于某种原因CoCreateInstance不被包装:/

相关文章

windows无法连接到wifi怎么办
文章浏览阅读2.2k次,点赞6次,收藏20次。在我们平时办公工作...
文章浏览阅读1k次。解决 Windows make command not found 和...
文章浏览阅读3.2k次,点赞2次,收藏6次。2、鼠标依次点击“计...
文章浏览阅读1.3w次。蓝光版属于高清版的一种。BD英文全名是...
文章浏览阅读974次,点赞7次,收藏8次。提供了更强大的功能,...