正如@Trampster 所指出的,heat.exe 不能很好地从 COM 服务器收集注册表项。我试过了,但结果不完整。
相反,按照Monitor Registry Accesses (InstallSite Tools: Monitoring)的建议,我使用了 InstallShield RegSpyUI。据推测,这与 Installshield v7 及更高版本一起提供,包括评估版本。此信息可能已过时;我可以确认它没有随 VS2013 附带的几乎没用的 Installshield LE 提供。
幸运的是,我确实有一份 InstallShield 2010 的副本,而且 RegSpyUI 确实提供了这个副本。
无论如何,RegSpyUI 使用起来很容易:将其指向 COM .exe,将注册表信息提取到 .reg 文件中。然后使用热量将其收集到一个 .wxs 文件中,您可以将其添加到您的 Wix 项目中
heat reg <some.reg> -gg -o <some.wxs>
然后只需修改任何指向 COM .exe 位置的硬编码路径,以便它们反映预期的安装文件夹。
例如,如果 RegSpyUI+heat 创建的 .wxs 文件有这样的内容
<Fragment>
<DirectoryRef Id="TARGETDIR">
<Component Id="blah" Guid="{xxxxxxxxxxxxxxxxxxxxxxxxx}" KeyPath="yes">
<RegistryKey Key="TypeLib\{xxxxxxxxxxxxxxxxxxxxxx}\4.1\0\win32" Root="HKCR">
<RegistryValue Value="C:\Users\you\projects\MyProject\dependencies\installation\COMFOO.exe" Type="string" />
</RegistryKey>
</Component>
</DirectoryRef>
</Fragment>
并且您正在您的主 wix 文件中安装到
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="COMPANY" Name="My Company">
<!--This is the actual installation folder-->
<Directory Name="MyProduct" Id="MYPRODUCT">
然后只需将 RegistryValue@value 路径编辑为 ..." [MYPRODUCT]\COMFOO.exe
"