加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

注册免费Com和dll清单

发布时间:2020-12-14 01:39:24 所属栏目:Windows 来源:网络整理
导读:我正在设置注册免费的COM,但有一个小问题,我的另一个COM对象可能是客户端. App.exe —– COM Server / Client dll(已注册或不注册)——– COM Server DLL(未注册) 我的问题是,是否可以为第二个dll(COM Server / Client 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不被包装:/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读