我想安装注册免费的COM,但有一个小问题,我另一个COM对象可能是客户端。注册免费的COM和DLL清单
APP.EXE -----> COM服务器/客户端DLL(注册与否)--------> COM服务器DLL(未注册)
我的问题是,是否有可能为第二个DLL(COM服务器/客户端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的失败,因为它的依赖不会考虑)
为什么你叫装配'comser.dll'?程序集清单信息是否合并?使用描述性名称部署程序集要容易得多,例如“Microsoft.VC90.CRT”,包含不同名称的dll:“msvcr90.dll”。在处理dll程序集时,由于单个清单现在有两个用途:调用程序集的内容给用户,以及描述程序集中dll的依赖关系,因此调试变得更加困难。 – 2010-10-20 12:41:24
这些名字已经改变,以保护无辜!那些不是真名。这些是本机COM dll而不是.NET程序集。 – Steve 2010-10-20 13:31:30
另外,“不起作用”算作什么?是否exe和第二个DLL加载,并简单地未能实例化第三,或exe的,或第二个DLL无法完全加载?让事情实际上无法加载是一个好的步骤,因为它意味着系统正在查看清单,并至少将错误记录到系统或应用程序事件日志中。如果它简单地失败了对CoCreateInstance的调用,那么它可能根本看不到该清单。 – 2010-10-20 15:57:52