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

Edw*_*ard 16 environment wix

有没有办法将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


and*_*-za 6

由于我还不能添加评论,关于@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)

然后所有文件都到达我想要的位置。