Get an environment variable into a WIX property

拜拜、爱过 提交于 2019-12-17 16:32:48

问题


Is there a way to get an environment variable in WIX into a property?

I'm trying to get the USERPROFILE with:

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

But this only picks up the USERPROFILE of the build machine, where the installer is built.

I want it to use the USERPROFILE of the machine where the app is being installed.


回答1:


You can make use of Environment variables during installation but this requires using a custom action. You will need to set the UserFolder property with a Type 51 Custom Action as opposed to setting the property during the build. The [%ENVVARNAME] format is used to make use of an environment variable, but the name of the environment variable is case-sensitive.

A WiX example of a custom action that sets a property:

<CustomAction Id="SetUserFolder" Property="UserFolder" Value="[%USERPROFILE]EdwardsApp\MyFolder" />

You can read more on Custom Actions in WiX here:

http://blogs.technet.com/b/alexshev/archive/2008/02/21/from-msi-to-wix-part-5-custom-actions.aspx




回答2:


Alternative is to use SetProperty element - it will effectively create type 51 custom Action. It is simpler than using Custom Action as you don't need to separately specify the schedule for it - everything is done in one element. In my example below, I set the property only if its empty, i.e. was not passed from the command line.

Example:

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



回答3:


since i cant add a comment yet, with regard to @demp's answer, i had to do this to get the condition to evaluate sometime during initialization so that the value could be displayed in a UI dialog:

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

I believe that Before="InstallInitialize" happens just before the installation itself proceeds (i.e. copying files and whatnot) and not during the initialization phase of the installer itself.




回答4:


In my case, I'm looking to get the USERPROFILE environment variable of the target machine to install all the files there. I achieved that like:

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

Then all the files went where i wanted them to go.



来源:https://stackoverflow.com/questions/3459998/get-an-environment-variable-into-a-wix-property

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!