Я использую cmake/cpack для создания своего проекта с WiX.
cmake запускает программуheat.exe (или что-то подобное), которая создает файлы files.wxs, содержащие файлы моего проекта в следующем формате:
Предположим, что один файл с именем a.txt находится внутри папки с именем «bin». Проект построен в NewFolder на рабочем столе.
<DirectoryRef Id="CM_DP_bin">
<Component Id="CM_CP_bin.a.txt" Guid="*">
<File Id="CM_FP_bin.a.txt" Source="C:/Users/mindlessbot/Desktop/NewFolder/_CPack_Packages/WIX/packageName/bin/a.txt" KeyPath="yes"/>
</Component>
</DirectoryRef>
После создания MSI весь NewFolder перемещается в другой каталог (на нашем сервере). В результате, когда я пытаюсь создать патч WiX, используя выходной файл .wixpdb, я получаю следующую ошибку:
error PYRO0103 : The system cannot find the file 'C:/Users/mindlessbot/Desktop/NewFolder/_CPack_Packages/WIX/packageName/bin/a.txt'
Погуглив, я обнаружил, что .wixpdb содержит ссылки на файлы, которые изменили свое местоположение, поэтому, естественно, не может их найти. Я нашел поток, в котором кто-то предоставил команды для использования bindpaths, однако, поскольку я использую cpack, я не могу напрямую их вызывать.
Итак, как я должен это сделать?
Некоторая дополнительная информация:
Мой проект содержит несколько файлов wxs (не уверен, что это имеет значение)
Команда cpack:
path/to/cpack.exe -G WIX --config path/to/config.cmake
Команда patch запускается отдельно:
torch.exe -p -xi path/to/oldInstaller.wixpdb path/to/newInstaller.wixpdb -out path/to/patch.wixmst
candle.exe path/to/patch.wxs -out path/to/patch.wixobj
light.exe path/to/patch.wixobj -out path/to/patch/wixmsp
pyro.exe path/to/patch.wixmsp -out path/to/patch.msp -t PatchBaselineID path/to/patch/wixmst