Значение переменной препроцессора Wix включает кавычки

с использованием Wix 3.11, проект построен с использованием msbuild 14.0.25420.1

Я столкнулся с ситуацией, когда строка, которую я определяю в переменной процессора, имеет заключительные кавычки, включенные в значение переменной.

Буду признателен, если кто-нибудь скажет мне:

  1. почему возникает такое поведение (я что-то не так делаю?)
  2. как я бы процитировал строковое значение с пробелами

В проекте есть главный файл .wxs и несколько файлов .wxi Include.

В главном Product.wxs в элементе Wix:

<?define registry_key_path="SOFTWARE\MySoftwareGroup\MySoftware" ?>

Затем во включаемом файле Component.wxi внутри элемента Component:

<RegistryValue
  Root="HKLM"
  Key="$(var.registry_key_path)"
  Name="InstallFolder"
  Value="[INSTALLDIR]"
  Type="string" />

Установка завершается ошибкой:

Ошибка 1406. Не удалось записать значение InstallFolder в раздел \ "SOFTWARE \ MySoftwareGroup \ MySoftware".

Вы можете видеть, что ключ содержит кавычки. Его следует читать:

\ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ MySoftwareGroup \ MySoftware

Если я удалю кавычки из определения:

<?define registry_key_path=SOFTWARE\MySoftwareGroup\MySoftware ?>

установщик правильно анализирует переменную, находит нужный раздел реестра и записывает в него.

Почему включены цитаты?

Как мне указать строковое значение в кавычки, если оно содержит пробел?


person Jayden    schedule 25.01.2018    source источник


Ответы (1)


У меня работает с WiX v3.11.1.2318. Откройте ваш .msi в Orca, чтобы проверить Registry таблицу и посмотреть, существуют ли там кавычки. Если вы можете воспроизвести его в небольшом примере .wixproj, пожалуйста, откройте ошибку.

person Bob Arnson    schedule 25.01.2018
comment
Спасибо. Я пробовал создать это в новом проекте, и, несмотря на то, что копировал проект как можно ближе к оригиналу, я не могу воссоздать проблему. Кроме того, теперь я не могу воссоздать проблему в моем исходном проекте ... так что либо я сделал что-то глупое, либо гремлин или перезагрузка разобрались с этим. Однако спасибо за вашу помощь. Помечено как ответ, чтобы закрыть вопрос. - person Jayden; 26.01.2018