3

我遇到了以下问题:在我的 WiX 设置中,我需要注册一个 COM 对象。我有一个“.tlb”文件和一个“.dll”文件(在我的示例中:XYCommon.dll 和一个 XYCommon.tlb)现在我想进行设置以注册 TLB。如何在 Windows Installer XML 中执行此操作?

我的第一次尝试是使用 CustomAction 并打开“Regasm.exe”并注册它 - 但我不知道如何将 Regasm.exe 用于注册 XYCommon.tlb

任何帮助?谢谢

4

1 回答 1

12

使用名为Heat的 WiX 收割机实用程序。它将生成包含正确注册(和注销)您的 COM 对象所需的注册表项的 WiX 源。

您的 COM 对象(XYCommon.dll 和 XYCommon.tlb)会经常更改吗?

如果不是:那么只需在这两个文件上运行 Heat(阅读命令行参数并试验它们以获得所需的输出),如有必要,清理它们,并将它们添加到您的项目中。

如果是:

如果您想尝试将 Heat 作为 Visual Studio 预构建事件运行,这个 SO 答案应该会给您一些指导:Add a folder to installer in wix not files?

有时,当您使用 Heat 时,您仍然需要稍微调整然后生成的 .wxs 文件。因此,您可能想要编写一些包装实用程序,在文件列表或目录上调用 heat,然后按照您的意愿清理输出。然后,您可以将该实用程序添加到您的构建过程中。

在单个文件上使用热的示例:

heat.exe 文件 myFile.dll -gg -g1 -suid -svb6 -out myFile.wxs

在整个目录上使用 heat 的示例:

heat.exe 目录 myDirectory -gg -g1 -suid -svb6 -out myDirectory.wxs

我使用的一些参数的细分:

  • heat.exe:如果它不在您的路径中,您必须指定可执行文件的完整路径
  • 文件 myFile.dll:指定要在单个文件 myFile.dll 上运行热
  • dir myDirectory:指定要在目录myDirectory上运行heat
  • gg:为组件生成 guid
  • g1:生成不带花括号的 guid
  • suid:禁止为文件和组件创建唯一生成的 id,而是使用文件名作为 id
  • svb6:禁止为 VB6 运行时收集 COM 信息。注意:如果要注册使用 VB6 运行时的 COM 对象,则需要使用此标志,以免覆盖 VB6 运行时注册表项
于 2012-08-28T12:33:10.380 回答