wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了注册免费Com和dll清单大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_618_2@

概述

我正在设置注册免费的COM,但有一个小问题,我的另一个COM对象可能是客户端. App.exe —–> COM Server / Client dll(已注册或不注册)——–> COM Server DLL(未注册) 我的问题是,是否可以为第二个dll(COM Server / Client dll)创建一个清单?我无法控制可执行文件,但是如果我这样做,如果我为可执行文件创建了客户端清单,并且为C
@H_618_2@
@H_618_2@ @H_618_2@
我正在设置注册免费的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:scheR_845_11845@as-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失败,因为不虑依赖关系)

@H_618_2@
@H_618_2@
只需向服务器/客户端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不被包装:/

@H_618_2@@H_618_2@

大佬总结

以上是大佬教程为你收集整理的注册免费Com和dll清单全部内容,希望文章能够帮你解决注册免费Com和dll清单所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。