如何为仅用于远程COM对象的TLB创建清单文件?

时间:2016-03-22 12:25:09

标签: windows delphi winapi com regfreecom

我的Delphi应用程序Client.exe需要几个.tlb个文件才能工作。这些文件定义服务器接口。使用System.Win.ComObj.CreateRemoteComObject创建相应的对象实例。

有什么问题?

现在,.tlb文件在安装期间使用regtlibv12.exe进行全局注册,并在卸载软件时取消注册。这使得无法安装和卸载同一软件的多个实例,因为它可能会破坏TLB注册。

尝试使用Registration Free COM

解决问题

我们的想法是使用.tlb文件而不注册,但使用.manifest文件。 我知道如何使用customized Windows application manifest file with Delphi。但我不知道如何从.tlb文件中提取信息并创建正确的.manifest文件。

我发现Mt.exe可用于生成.manifest个文件,但它对我没有帮助,因为

  • 在设置-tlb参数时要求相应的DLL文件,但由于COM对象是在远程计算机上创建的,因此应用程序附带了.dll个文件

  • 它不接受参数列表中的多个.tlb文件。

Make My Manifest 无人看管Make Man Manifest 等其他工具不再可用,或者也无法帮助我。

在这种情况下创建清单文件的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

AFAIK RegFree COM 仅支持registration of local instances, via a dll。没有办法将它与DCOM一起使用,这比本地COM要复杂得多。

根据我自己的实验,DCOM可能是一个真正的PITA,特别是在注册方面。恕我直言,您应该使用本地COM对象,或切换到另一种标准方法,如REST服务。您可以使用例如重新使用几乎相同的接口。 an SOA approach over REST/JSON - 请参见sicClientDriven模式以模拟DCOM对象。