如何使用Windows Installer XML注册COM-Object

时间:2012-08-28 12:11:47

标签: com wix

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

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

任何帮助?感谢

1 个答案:

答案 0 :(得分:12)

使用名为Heat的WiX收集器实用程序。它将生成包含必要注册表项的WiX源,以正确注册(和注销)COM对象。

您的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.exe dir myDirectory -gg -g1 -suid -svb6 -out myDirectory.wxs

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

  • heat.exe:如果不在您的路径中,您必须指定可执行文件的完整路径
  • file myFile.dll:指定要对单个文件myFile.dll
  • 运行加热
  • dir myDirectory:指定要在目录myDirectory
  • 上运行热量
  • gg:为组件生成guid
  • g1:生成没有花括号的guids
  • suid:禁止为文件和组件创建唯一生成的ID,而是使用文件名作为ID
  • svb6:抑制收获VB6运行时的COM信息。注意:如果要注册使用VB6运行时的COM对象,则需要使用此标志,以便不覆盖VB6运行时注册表项