2011-04-29 67 views
25

比方說,我生成我的WIX XML文件,產品ID爲*。也爲每個組件GUID我使用*。WIX自動生成GUID *?

<Product Id="*" Name="xxx" Language="1033" Version="1.0.0.0" Manufacturer="xxx" UpgradeCode="xxx"> 

幕後是每次編譯我的WIX安裝程序時旋轉一個唯一的GUID?假設我的版本1.0.0安裝了一臺機器。然後我重新編譯我的WIX安裝程序到版本1.0.1。

當我去安裝1.0.1 WIX如何知道1.0.0已經安裝,因此將刪除所有文件/註冊表項並安裝1.0.1?

我應該從GUID使用*還是應該在我的WIX XML配置中使用唯一的ID/GUID?

+0

WiX文檔將對此有一個清晰且容易找到的答案。 **如果它不**,你不應該看那個GUID(它被稱爲無證) – sehe 2011-04-29 12:59:50

+1

但是每次編譯時,WIX是否爲每個*創建一個新的GUID?它如何鏈接該GUID? – aherrick 2011-04-29 14:26:41

+0

http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Auto-generated-vs-statically-assigned-GUIDs-td4670083.html – Isaiah4110 2013-09-19 02:26:34

回答

44

Product/@Id="\*"隨機生成一個新的GUID,這對於產品代碼來說已經足夠了。 Component/@Guid="\*"計算只要目標路徑保持不變,遵守組件規則就必須保持相同的GUID。

+1

非常感謝。那麼產品ID自動生成的含義是什麼?用於產品ID的GUID是什麼?換句話說,每次構建生成唯一的產品ID有哪些優點/缺點? – aherrick 2011-04-29 18:05:36

+1

@aherrick產品代碼必須更改爲使用主要升級。查看Yan的答案,瞭解詳情的鏈接。 – 2011-04-29 18:52:15

+0

因此,如果我將我的WIX安裝程序從1.0.0版本升級到2.0.0(主要升級?),並將我的產品ID保留爲*,那麼這意味着什麼?仍然不知道我滿意這個... – aherrick 2011-04-30 10:18:51

3

This quick guideline可以幫到你。請確保檢查該文章引用的MSDN鏈接,以便更好地瞭解它的工作原理。

1

其他版本與新版本鏈接的是升級代碼。假設您想要使用升級功能,對於相同的產品,這應該不會改變。否則,它幾乎就像每個版本是不同的產品

+0

非常感謝,那麼產品ID GUID的用途是什麼?這是我仍然在這裏困惑的主要事情。 – aherrick 2011-05-03 13:29:59

7

產品ID(ProductCode)唯一標識安裝程序包中的所有內容作爲特定產品。當您搜索以查看是否安裝了以前的版本時,將在升級代碼上執行搜索。對於使用特定升級代碼安裝程序找到的所有項目,都會將每個產品代碼記錄爲同一產品的不同版本。因此,您可以說具有相同升級代碼的不同產品代碼可識別不同的產品(如果您願意,也可使用同一產品的版本)。

+0

那麼,在每個版本上生成隨機產品ID並保留一個GUID會帶來哪些好處/問題?基本上沒有? – aherrick 2011-05-03 16:36:26

0

這可能是有點誤導,但我確實有很多文件,我作爲進口組件集成到一個新的WiX Product.wxs文件。我發現我已經創建了Guid="*"所有組件後試圖建立安裝程序時,維克斯報告每個組件以下錯誤:

組件「AjaxControlToolkit.dll」與路徑「TARGETDIR \密鑰文件ajaxcontroltoolkit.dll」。由於此路徑並非植根於標準目錄之一(如ProgramFilesFolder),因此此組件不符合具有自動生成的GUID的條件。

我用下面的PowerShell腳本爲每個組件分配一個新的GUID。請注意,這個腳本會修改Product.wxs文件直接和文件的備份應保存在萬一出錯:

(Get-Content Product.wxs) | 
Foreach-Object { $guid = [guid]::NewGuid().ToString(); $_ -replace 'Guid="\*"',"Guid=""$guid"""} | 
Out-File Product.wxs 
0

您必須在您的產品元素的值屬性「的UpgradeCode」。它必須是唯一的,並且對於未來的所有版本,必須保持不變。升級代碼負責安裝升級或不升級,具體取決於正在執行的安裝程序版本。

即: -

<Product Id="*" Name="My Application" Language="1033" Version="1.1.0" Manufacturer="Myself :p" UpgradeCode="{561DA858-5398-4B87-8F3A-8B8BB12650F6}"> 

不保持靜態升級代碼將導致重複相同的安裝。