有没有办法将WIX中的环境变量转换为属性?
我正试着搞定USERPROFILE:
Property Id="UserFolder" Value="$(env.USERPROFILE)\EdwardsApp\MyFolder"
Run Code Online (Sandbox Code Playgroud)
但这仅仅USERPROFILE是构建安装程序的构建机器.
我希望它使用USERPROFILE安装应用程序的机器.
dem*_*emp 18
另一种方法是使用SetProperty元素 - 它将有效地创建51类自定义Action.它比使用自定义操作更简单,因为您不需要单独指定它的计划 - 所有操作都在一个元素中完成.在下面的示例中,我仅在属性为空时设置该属性,即未从命令行传递.
例:
<SetProperty Id="PROP_MYSOME"
Before="InstallInitialize"
Sequence="execute"
Value="[%USERDOMAIN]">
<![CDATA[NOT Installed AND PROP_MYSOME=""]]>
</SetProperty>
Run Code Online (Sandbox Code Playgroud)
fle*_*her 11
您可以在安装期间使用环境变量,但这需要使用自定义操作.您需要UserFolder使用a 设置属性,Type 51 Custom Action而不是在构建期间设置属性.[%ENVVARNAME]格式用于使用环境变量,但环境变量的名称区分大小写.
设置属性的自定义操作的WiX示例:
<CustomAction Id="SetUserFolder" Property="UserFolder" Value="[%USERPROFILE]EdwardsApp\MyFolder" />
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关WiX中自定义操作的更多信息:
http://blogs.technet.com/b/alexshev/archive/2008/02/21/from-msi-to-wix-part-5-custom-actions.aspx
由于我还不能添加评论,关于@demp 的回答,我必须这样做才能在初始化期间的某个时间评估条件,以便可以在 UI 对话框中显示该值:
<SetProperty Id="MY_PROPERTY" Value="[%USERDOMAIN]" After="LaunchConditions" Sequence="first" />
Run Code Online (Sandbox Code Playgroud)
我相信这Before="InstallInitialize"发生在安装本身进行之前(即复制文件等)而不是在安装程序本身的初始化阶段。
小智 5
就我而言,我希望获取目标计算机的 USERPROFILE 环境变量来安装那里的所有文件。我实现了这样的目标:
<Property Id="HOME_FOLDER" >
<DirectorySearch Id="userProfileSearch" Depth="0" Path="[%USERPROFILE]" />
</Property>
Run Code Online (Sandbox Code Playgroud)
然后所有文件都到达我想要的位置。