我正在尝试设置无需注册的COM对象,但是我遇到了一个小问题,即另一个COM对象可能是客户端。
应用程序.exe----->COM服务器/客户端dll(已注册或未注册)-------->COM服务器DLL(未注册)
我的问题是,是否可以为第二个dll(COM服务器/客户端dll)创建一个清单文件?我无法控制可执行文件,但如果我能够控制它,那么为可执行文件创建一个客户端清单以及为COM服务器dll创建一个服务器清单将会起作用。
这是中间dll的清单文件。我尝试嵌入它并将其设置为外部,仍然无法正常工作。
如果exe没有清单,那么不会考虑dll的清单。我可以通过设置好一切,然后在程序集清单中放置错误来证明这一点。这将弹出通常的消息:
“无法创建进程:此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。”
如果我删除应用程序清单,应用程序会加载(尽管CoCreateInstance失败,因为依赖项不会被考虑)。
应用程序.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>
深入调查后,我发现只要中间的动态链接库也是无注册表可用的,并且exe拥有一个应用程序清单,就可以让所有东西都正常工作。但一旦我注册了中间dll,并删除了应用程序清单(我无法控制使用我的dll的exe),整个过程就会停止工作。如果exe没有清单,那么不会考虑dll的清单。我可以通过设置好一切,然后在程序集清单中放置错误来证明这一点。这将弹出通常的消息:
“无法创建进程:此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。”
如果我删除应用程序清单,应用程序会加载(尽管CoCreateInstance失败,因为依赖项不会被考虑)。