将环境变量获取到WIX属性中

时间:2010-08-11 15:23:59

标签: wix environment

有没有办法将WIX中的环境变量转换为属性?

我正在尝试使用USERPROFILE

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

但是这只会选择构建安装程序的构建机器的USERPROFILE

我希望它使用安装该应用的机器的USERPROFILE

4 个答案:

答案 0 :(得分:17)

替代方法是使用SetProperty element - 它将有效地创建51类自定义Action。它比使用自定义操作更简单,因为您不需要单独指定它的计划 - 所有操作都在一个元素中完成。在我下面的例子中,我只设置属性为空,即没有从命令行传递。

示例:

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

答案 1 :(得分:10)

您可以在安装期间使用环境变量,但这需要使用自定义操作。您需要将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 :(得分:3)

因为我还无法添加评论,关于@demp的答案,我必须这样做才能在初始化期间的某些时候评估条件,以便可以在UI对话框中显示该值:

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

相信 Before="InstallInitialize"恰好在安装本身进行之前(即复制文件和诸如此类)和在安装程序本身的初始化阶段发生。

答案 3 :(得分:2)

就我而言,我希望获得目标机器的USERPROFILE环境变量来安装那里的所有文件。我实现了这一点:

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

然后所有文件都转到了我希望它们去的地方。