Использование Wix для создания 32-битных и 64-битных установщиков из одного файла .wxs

Я хотел бы сохранить свой верхний уровень .wxs DRY при сборке 32- и 64-разрядных установщиков. Я использую аргумент -arch для Candle.exe, чтобы контролировать, какая архитектура установщика по умолчанию создается.

Стена, о которой я сейчас сталкиваюсь, заключается в том, что похоже, что ProgramFilesFolder отличается между 32 и 64-битными (ProgramFiles64Folder) архитектурами. Вот моя первая попытка обойти:

<?if $(sys.BUILDARCH)=x64 ?>
<Directory Id='ProgramFiles64Folder' Name='PFiles'>
<?else ?>
<Directory Id='ProgramFilesFolder' Name='PFiles'>
<?endif ?>
    <Directory Id='the-rest' Name="Company Name">
...

Я пробовал это с ошибкой. По-видимому, проверка XML запускается до того, как оценивается препроцессор. Когда я вручную перехожу на использование ProgramFiles64Folder, моя сборка работает.

Я безуспешно пытался пройти по маршруту DirectoryRef. Есть ли предложения, как заставить это работать без замены sed в файле .wxs?

Примечание: я пробовал это в Wix 3.5 и 3.6.

31
задан KevM 3 June 2011 в 19:49
поделиться

1 ответ

У меня была эта проблема с WiX 3.7. Это был крошечный установщик, и мне не требовалась гибкость переменных, поэтому я скрыл закрывающий тег Directory от анализатора, обернув его так же, как открывающий тег:

<?if $(sys.BUILDARCH)=x64?>
    <Directory Id="ProgramFiles64Folder">
<?else?>
    <Directory Id="ProgramFilesFolder">
<?endif?>

...

<?if $(sys.BUILDARCH)=x64?></Directory><?else?></Directory><?endif?>

Это взлом, но это сработало для моего варианта использования.

3
ответ дан 27 November 2019 в 22:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: