У меня есть проект, созданный с помощью WIX Toolkit, который развертывает несколько компонентов в составе простого пакета установщика (MSI):
libtest.dll
libtest.h
libtest_example.exe
У меня есть особенность в libtest.dll
который не предоставляется непосредственно пользователю, где он проверяет PWD
(настоящий рабочий каталог) для файла с именем override.raw
, Если этот файл существует, нормальный код инициализации в libtest.dll
использован libtest_example.exe
будет вести себя по-другому (то есть: включить ведение журнала отладки на консоли, если приложение запускается с консоли).
Я хочу интегрировать функцию в libtest.dll
так что если он не может найти override.raw
в PWD
, он проверяет, куда был установлен пакет MSI. Это пакет, который я компилирую для x86 и x64, поэтому по умолчанию расположены:
Конечно, пользователь может изменить место установки по умолчанию.
Итак, что я пытаюсь сделать, это определить, в моей библиотеке C ++, libtest.dll
где мое программное обеспечение было установлено, и проверьте это местоположение для override.raw
если он не существует в PWD.
Есть ли тривиальный способ сделать это? Более того, есть ли способ включить какой-либо файл из моего проекта WIX непосредственно в мой источник C ++, чтобы мне нужно было изменить значение только в одном месте? Мое лучшее предположение — я запрашиваю какое-то значение GUID / UUID из проекта WIX и использую системный вызов Windows или команду Windows SDK для запроса записи реестра, основанной на ключе, но это насколько я понял ,
Я также написал грязный пример, где WIX добавляет дополнительные ключи реестра, но они не кажутся идентичными от системы к системе, поэтому я ищу помощь с портативным решением, которое работает в Windows XP, Vista, 7 , 8.x и 10.
Спасибо!
Вы можете использовать MsiGetComponentPath Функция API MSI для получения ключевого пути к компоненту (обычно к файлу). Вы также можете просто записать выбранный пользователем каталог установки в реестр и запросить его из своего кода инициализации. Это, вероятно, проще и не требует согласования кода продукта и идентификаторов GUID компонентов.
Других решений пока нет …