2010-08-11 120 views
14

有沒有辦法讓WIX中的環境變量進入屬性?獲取環境變量到WIX屬性

我試圖讓USERPROFILE有:

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

但這只是拿起構建機,其中安裝程序內置的USERPROFILE

我希望它使用正在安裝應用程序的機器的USERPROFILE

+3

在構建Wix安裝程序時,使用$(env.USERPROFILE)會爲您的構建計算機帶來UserProfile的值。一些好的解決方案已經回覆。 – 2014-01-01 08:13:30

+1

除了Farrukh的評論:'$(env ...)'語法來自[WiX Preprocessor](http://wixtoolset.org/documentation/manual/v3/overview/preprocessor.html)。 – CodeFox 2014-07-29 08:49:44

回答

10

您可以在安裝過程中使用環境變量,但這需要使用自定義操作。您需要將UserFolder屬性設置爲Type 51 Custom Action,而不是在構建期間設置屬性。 [%ENVVARNAME]格式用於使用環境變量,但環境變量的名稱區分大小寫。

自定義操作的

一個維克斯的例子,設置屬性:

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

你可以閱讀更多的自定義操作在威克斯在這裏:

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

+0

USERPROFILE沒有尾部反斜槓,所以不應該是: Value =「[%USERPROFILE] \ EdwardsApp \ MyFolder」 – Jamie 2014-09-29 19:35:28

+0

我試圖使用ProgramFiles(x86)環境變量,但我無法弄清楚如何避免括號。我總是得到ICE03:格式字符串無效。任何人都知道如何使用這個環境變量? – Dan 2015-08-31 20:45:32

13

替代方案是使用SetProperty element - 它將有效地創建51型自定義操作。這比使用自定義操作更簡單,因爲您不需要單獨指定它的時間表 - 所有操作都在一個元素中完成。在下面的例子中,我只在屬性爲空的情況下設置屬性,即沒有從命令行傳遞屬性。

例子:

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

就我而言,我希望得到的目標機器的USERPROFILE環境變量有安裝的所有文件。我實現了這樣的:

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

然後所有的文件去了我想讓他們去的地方。

2

,因爲我不能添加評論還,關於@ DEMP的回答,我不得不這樣做是爲了獲得在初始化過程中的某個時候評估的條件,這樣的值可以顯示在用戶界面對話框:

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

相信Before="InstallInitialize"只是自己進行安裝(即複製文件和諸如此類的東西),並在安裝程序本身的初始化階段之前發生。