Как указывал @Trampster, heat.exe плохо справляется со сбором записей реестра с COM-серверов. Я пытался, но результаты были неполными.
Вместо этого, следуя совету на Мониторинг доступа к реестру (Инструменты InstallSite: Мониторинг) , я использовал InstallShield RegSpyUI. Предположительно, он поставляется с версиями Installshield v7 и выше, включая ознакомительную версию. Эта информация может быть устаревшей; Я могу подтвердить, что не поставляется с довольно бесполезным Installshield LE, который поставляется с VS2013.
К счастью, у меня была копия InstallShield 2010, и она пришла с RegSpyUI.
Во всяком случае, RegSpyUI был легким в использовании: укажите его на COM .exe, извлеките информацию реестра в файл .reg. Затем используйте Heat, чтобы собрать его в файл .wxs, который вы можете добавить в свой проект Wix
heat reg <some.reg> -gg -o <some.wxs>
Тогда нужно просто изменить любые жестко закодированные пути, которые указывают на местоположение COM .exe, чтобы они отражали предполагаемую папку установки.
например. если файл .wxs, созданный RegSpyUI + heat, имеет что-то вроде этого
<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
"