Получить переменную среды в свойство WIX

есть ли способ получить переменную среды в WIX в свойство?

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

Property Id="UserFolder"  Value="$(env.USERPROFILE)EdwardsAppMyFolder"

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

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

4 ответов


вы можете использовать переменные среды во время установки, но для этого требуется использовать пользовательское действие. Вам нужно будет установить 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


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

пример:

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

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

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

Я верить это Before="InstallInitialize" происходит непосредственно перед самой установкой (т. е. копирование файлов и тому подобное) и не на этапе инициализации программы установки.


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

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

затем все файлы пошли туда, куда мне захотелось.