Получить переменную окружения в свойство 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>
Затем все файлы пошли туда, куда я хотел, чтобы они ушли.