visual studio — проверьте, существует ли файл в пользовательском & quot; месте установки & quot; в приложении C ++

У меня есть проект, созданный с помощью 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, поэтому по умолчанию расположены:

  • 32-битная версия
    • x86
      • C: \ Program Files \ 42Chickens \ libtest
    • x64
      • C: \ Program Files (x86) \ 42Chickens \ libtest
  • 64-битная версия
    • x86
      • НЕ УСТАНАВЛИВАЕТСЯ
    • x64
      • C: \ Program Files \ 42Chickens \ libtest

Конечно, пользователь может изменить место установки по умолчанию.

Итак, что я пытаюсь сделать, это определить, в моей библиотеке C ++, libtest.dllгде мое программное обеспечение было установлено, и проверьте это местоположение для override.raw если он не существует в PWD.

Есть ли тривиальный способ сделать это? Более того, есть ли способ включить какой-либо файл из моего проекта WIX непосредственно в мой источник C ++, чтобы мне нужно было изменить значение только в одном месте? Мое лучшее предположение — я запрашиваю какое-то значение GUID / UUID из проекта WIX и использую системный вызов Windows или команду Windows SDK для запроса записи реестра, основанной на ключе, но это насколько я понял ,

Я также написал грязный пример, где WIX добавляет дополнительные ключи реестра, но они не кажутся идентичными от системы к системе, поэтому я ищу помощь с портативным решением, которое работает в Windows XP, Vista, 7 , 8.x и 10.

Спасибо!

1

Решение

Вы можете использовать MsiGetComponentPath Функция API MSI для получения ключевого пути к компоненту (обычно к файлу). Вы также можете просто записать выбранный пользователем каталог установки в реестр и запросить его из своего кода инициализации. Это, вероятно, проще и не требует согласования кода продукта и идентификаторов GUID компонентов.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]