有没有办法将WIX中的环境变量转换为属性?
我正在尝试使用USERPROFILE
:
Property Id="UserFolder" Value="$(env.USERPROFILE)\EdwardsApp\MyFolder"
但是这只会选择构建安装程序的构建机器的USERPROFILE
。
我希望它使用安装该应用的机器的USERPROFILE
。
答案 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>
然后所有文件都转到了我希望它们去的地方。