Получить переменную окружения в свойство WIX

Есть ли способ получить переменную окружения в WIX в свойство?

Я пытаюсь получить USERPROFILE с помощью:

Property Id="UserFolder"  Value="$(env.USERPROFILE)\EdwardsApp\MyFolder"

Но это только поднимает USERPROFILE машины сборки, где встроен установщик.

Я хочу, чтобы он использовал USERPROFILE машины, на которой установлено приложение.

Ответы

Ответ 1

Во время установки вы можете использовать переменные среды, но для этого требуется использование настраиваемого действия. Вам нужно будет установить свойство UserFolder с Type 51 Custom Action, а не устанавливать свойство во время сборки. Формат [% ENVVARNAME] используется для использования переменной среды, но имя переменной среды зависит от регистра.

Пример WiX пользовательского действия, устанавливающего свойство:

<CustomAction Id="SetUserFolder" Property="UserFolder" Value="[%USERPROFILE]EdwardsApp\MyFolder" />

Подробнее о пользовательских действиях в WiX вы можете узнать здесь:

http://blogs.technet.com/b/alexshev/archive/2008/02/21/from-msi-to-wix-part-5-custom-actions.aspx

Ответ 2

Альтернативой является использование Элемент SetProperty - он будет эффективно создавать пользовательское действие типа 51. Это проще, чем использование пользовательского действия, поскольку вам не нужно отдельно указывать расписание для него - все делается в одном элементе. В моем примере ниже я устанавливаю свойство только в том случае, если его пустая, то есть не была передана из командной строки.

Пример:

<SetProperty Id="PROP_MYSOME"
             Before="InstallInitialize" 
             Sequence="execute"
             Value="[%USERDOMAIN]">
    <![CDATA[NOT Installed AND PROP_MYSOME=""]]>
</SetProperty>

Ответ 3

так как я не могу добавить комментарий еще, в отношении ответа @demp, я должен был сделать это, чтобы получить условие для оценки во время инициализации, чтобы значение могло отображаться в диалоговом окне пользовательского интерфейса:

    <SetProperty Id="MY_PROPERTY" Value="[%USERDOMAIN]" After="LaunchConditions" Sequence="first"  />

Я считаю, что Before="InstallInitialize" происходит непосредственно перед самой установкой (например, копирование файлов и много чего) и не во время фазы инициализации самого установщика.

Ответ 4

В моем случае я ищу, чтобы получить переменную среды USERPROFILE на целевой машине, чтобы установить там все файлы. Я достиг такого:

<Property Id="HOME_FOLDER" >
  <DirectorySearch Id="userProfileSearch" Depth="0" Path="[%USERPROFILE]" />
</Property>

Затем все файлы пошли туда, куда я хотел, чтобы они ушли.