gpt4 book ai didi

com - 为免注册 COM 生成 list 文件

转载 作者:行者123 更新时间:2023-12-03 05:07:21 25 4
gpt4 key购买 nike

我有一些应用程序(一些 native 的,一些.NET)使用 list 文件,以便它们可以是 deployed in complete isolation ,无需任何全局 COM 注册。例如,对 dbgrid32.ocx com 服务器的依赖关系在与 myapp.exe 位于同一文件夹中的 myapp.exe.manifest 文件中声明如下:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity type="win32" name="myapp.exe" version="1.2.3.4" />
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="dbgrid32.ocx" version="5.1.81.4" />
</dependentAssembly>
</dependency>
</assembly>

dbgrid32.ocx 及其自己的 dbgrid32.ocx.manifest 文件部署到同一文件夹:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity type="win32" name="dbgrid32.ocx" version="5.1.81.4" />
<file name="dbgrid32.ocx">
<typelib
tlbid="{00028C01-0000-0000-0000-000000000046}"
version="1.0"
helpdir=""/>
<comClass progid="MSDBGrid.DBGrid"
clsid="{00028C00-0000-0000-0000-000000000046}"
description="DBGrid Control" />
</file>
</assembly>

这一切都很好,但手动维护这些 list 文件有点痛苦。有没有办法自动生成这些文件?理想情况下,我只想声明应用程序对 COM 服务器( native 和 .NET)列表的依赖关系,然后让其余部分自动生成。可能吗?

最佳答案

看来完美的解决方案还不存在。总结一些研究:

制作我的 list ( link )

此工具扫描 VB6 项目以查找 COM 依赖项,但它也支持手动声明后期绑定(bind) COM 依赖项(即通过 CreateObject 使用的依赖项)。

有趣的是,该工具将有关依赖项的所有信息放入应用程序 list 中。应用程序 exe 及其依赖项被描述为由多个文件组成的单个程序集。我之前没有意识到这是可能的。

看起来是一个非常好的工具,但从 0.6.6 版本开始,它有以下限制:

  • 仅适用于 VB6 应用程序,启动来自 VB6 项目文件。耻辱,因为它所做的很多事情实际上无关使用 VB6。
  • 向导式应用程序,而不是适合集成到构建中过程。如果您的依赖关系不会发生太大变化。
  • 没有来源的免费软件,依赖它是有风险的,因为它随时可能成为废弃软件。

我没有测试它是否支持.NET com库。

regsvr42 (codeproject link)

此命令行工具生成 native COM 库的 list 文件。它调用 DllRegisterServer,然后在将信息添加到注册表时监视自注册。它还可以为应用程序生成客户端 list 。

此实用程序不支持 .NET COM 库,因为它们不公开 DllRegisterServer 例程。

该实用程序是用 C++ 编写的。源代码已提供。

mt.exe

Windows SDK 的一部分(可以从 MSDN 下载),如果您安装了 Visual Studio,则已经拥有该 SDK。是documented here 。您可以使用它为 native COM 库生成 list 文件,如下所示:

mt.exe -tlb:mycomlib.ocx -dll:mycomlib.ocx -out:mycomlib.ocx.manifest

您可以使用它为 .NET COM 库生成 list 文件,如下所示:

mt.exe -managedassemblyname:netlib.dll -nodependency -out:netlib.dll.manifest

但是,该工具存在一些问题:

  • 第一个片段不会生成progid 属性,破坏客户端它将 CreateObject 与 progids 结合使用。
  • 将生成第二个片段 <runtime><mvid>元素之前需要将其删除 list 确实有效。
  • 生成客户 list 不支持应用程序。

也许 future 的 SDK 版本会改进这个工具,我在 Windows SDK 6.0a (vista) 中测试了该工具。

关于com - 为免注册 COM 生成 list 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/465882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com