Установщик Wix - как показать значение [Производитель] в пути установки?

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

Моя INSTALLFOLDER настроена с использованием этого:

<Directory Id="TARGETDIR"
           Name="SourceDir">
  <Directory Id="ProgramFiles64Folder">
    <Directory Id="ManufacturerFolder"
               Name="[Manufacturer]">
      <Directory Id="INSTALLFOLDER"
                 Name="[ProductName]" />
    </Directory>
  </Directory>
</Directory>

В разделе ‹Product› я определяю:

<UIRef Id="WixUI_InstallDir" />
<UIRef Id="WixUI_ErrorProgressText" />

<Property Id="WIXUI_INSTALLDIR"
          Value="INSTALLFOLDER" />

Когда я запускаю программу установки и попадаю на панель папки назначения, я вижу:

Install Service to: 
C:\Program Files\[Manufacturer]\[ProductName]\

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

Примечание: если я оставлю их и нажму «Далее», «Установить и завершить», все заработает. Это просто плохо выглядит.


person serialhobbyist    schedule 05.06.2013    source источник


Ответы (2)


Определите свои переменные в файле конфигурации.

Например, создайте файл с именем config.wxi, содержащий следующее:

<?xml version="1.0" encoding="utf-8"?>
  <Include>
    <?define Manufacturer = "Company Name" ?>
    <?define ProductName = "Product Name" ?>
  </Include>

Затем укажите переменные в вашем файле .wxs, используя $(var.Manufacturer) и $(var.ProductName).

person BryanJ    schedule 05.06.2013

Переменные связывания могут упростить эту задачу без необходимости возиться с определением переменных препроцессора. Это будет примерно так:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFiles64Folder">
    <Directory Id="ManufacturerFolder" Name="!(bind.property.Manufacturer)">
      <Directory Id="INSTALLFOLDER" Name="!(bind.property.ProductName)" />
    </Directory>
  </Directory>
</Directory>

Синтаксис !(bind.) задокументирован в теме Linker (light) в WiX.chm.

person Rob Mensching    schedule 22.06.2013
comment
Не похоже, что это работает, когда применяется преобразование экземпляра - я все равно получаю ProductName по умолчанию при установке другого экземпляра. - person arathorn; 21.05.2014
comment
@arathorn У вас есть решение для преобразования экземпляра? У меня аналогичная проблема, и я получаю имя продукта по умолчанию, когда применял преобразование экземпляра. - person chex; 09.08.2018
comment
К сожалению для меня это просто выплевывает строковое значение! (Bind.property.Manufacturer) при назначении Product / @ Manufacturer - person Reahreic; 11.02.2021