2012-06-12 101 views
12

在傳統Visual Studio部署項目安裝程序中,傳遞指定值爲TARGETDIR的命令行參數允許我覆蓋默認安裝位置(我的大部分安裝都是在沒有用戶交互的情況下進行的,因此命令行自動化被大量使用) 。但是,我得到的印象是,WiX(默認情況下)使用TARGETDIR作爲不同的東西。雖然我可以(也將會)更新我們的命令行工具來更改參數名稱,但仍然會留下所有現有的安裝,而這些安裝都需要手動觸摸(這是一項不小的工作)。WiX中TARGETDIR和INSTALLDIR的用法是什麼?

有沒有什麼辦法可以在不破壞任何東西的情況下通過指定TARGETDIR來覆蓋WiX包中的安裝位置?

+0

http://stackoverflow.com/questions/15921078/ wix-toolset-create-directory -in-root -disk-system-disk-or -c-and-copy-files-i 這對我有效。使用「anotherlocation」 – WtFudgE

回答

18

在做了更多的挖掘之後,看起來我以前的經歷是VSDPROJ(也可能是InstallShield)特有的行爲的結果,因爲WiX符合Windows Installer。

正如我在this link,TARGETDIR處發現的,實際上應該表示具有最大可用空間(假設有多個可用空間)的驅動器的根。這就是爲什麼WiX項目的目錄下嵌有Program Files等目錄.Visual Studio實際上添加了一個自定義操作,將該屬性覆蓋到完整的安裝路徑。

我能夠完成做兩件事情我想要的東西:

  1. 更改我的所有部件和部件組的安裝到TARGETDIR而不是INSTALLFOLDER(即維克斯擺在那裏的默認目錄)
  2. 添加一個自定義操作,將TARGETDIR屬性的值設置爲安裝路徑,假設沒有從命令行傳入。

爲了做到這一點,我說這個<Product>標籤下:

<CustomAction Id="SetTARGETDIR" Property="TARGETDIR" 
       Value="[ProgramFilesFolder][Manufacturer]\[ProductName]" 
       Execute="firstSequence" /> 

而且這個<InstallExecuteSequence>標籤內:

<Custom Action="SetTARGETDIR" Before="CostFinalize">TARGETDIR=""</Custom> 
+0

這解決了我的問題圍繞這個話題!非常感謝你分享它。 – joebalt

+0

這對我來說什麼都不做......它仍然把我的東西安裝在E. – WtFudgE

+1

@WtFudgE:你最好的辦法是發佈另一個問題。 –

相關問題