2016-09-15 80 views
1

當我構建安裝程序項目(如ClickOnce發佈按鈕)時,可以根據WIX配置文件中的項目Assembly version<?define ProductVersion="1.0.0.0" ?>版本生成新文件夾。 我想是這樣的:爲每個新版本創建新文件夾WIX

MyProjectPublishes/ 
----MyProject1.0.0.0/ 
     MyProjectSetup.msi 
----MyProject2.0.0.0/ 
     MyProjectSetup.msi 
----MyProject3.0.0.0/ 
     MyProjectSetup.msi 

回答

1

是的,但請記住,您的MSI不應該是主要的升級,否則將刪除以前的版本(除非這就是你想要的東西,大概你想並排側所以它們都可以同時安裝)。

首先,明白你不應該硬編碼組件GUID。儘管支持將相同組件的GUID轉到不同的文件夾,但它會在更新和卸載方面造成很多問題,並且最好避免。維護也是一件痛苦的事情,所以只需使用組件的自動引導。

創建目錄創作像這樣(假設你在的ProductVersion變量傳遞):

<?define ProductName="MyProduct"?> 
<?ifndef ProductVersion?> 
    <?define ProductVersion=1.0.0?> 
<?endif?> 
<Product Name="$(var.ProductName)" Version="$(var.ProductVersion)" ...> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder" Name="Program Files"> 
     <Directory Id="INSTALLDIR" Name="$(var.ProductName)"> 
     <Directory Id="VersionDir" Name="$(var.ProductVersion)"/> 
     </Directory> 
    </Directory> 
    </Directory> 
</Product> 

這僅僅是個目錄表的示例代碼段。我將INSTALLDIR定義爲根產品路徑,以便您控制進入每個版本目錄的所有版本,以便用戶不會意外踩過具有不同組件GU​​ID的以前版本(不同的組件GUID到同一位置會導致在卸載時刪除文件因爲它們沒有被重新計數)。

要安裝的話,你可以這樣做:

<Component Directory="VersionDir"> 
    <File Source="foo.dll"/> 
</Component> 

注意,我沒有指定GUID,也沒有任何其他ID爲這一問題。它們將被生成,並且GUID將保持穩定(也就是說,使用相同的版本,所有後續重建將具有相同的GUID,直到您更改版本 - 這正是它的工作方式)。

要查看正在使用的示例(以及如何從引用的C#項目中的文件獲取版本),請參閱https://github.com/heaths/psmsi/tree/develop/src/Setup

+0

好吧,我沒有問安裝文件夾。我問了如何自動構建msi到版本號爲 – Arti

+0

的文件夾什麼是「自動構建msi到文件夾」?構建MSI的要點是將東西安裝到特定的文件夾。如果您正在討論鬆散文件的源文件夾佈局,則適用相同的建議。 Name屬性是默認的目標和源名稱,但您始終可以顯式設置Source目錄。 – Heath

+0

我的意思是當你在Visual Studio中點擊''Build'''按鈕時,我想在新文件夾中找到'''.msi'''文件(文件夾的名字應該是程序的Assembly Version)。看到我的問題的結構。然後我想爲服務器上的用戶發佈此文件夾,以便他們能夠下載他們需要的版本。 而我的問題是:這是可能的自動執行,以防止版本的錯誤。 – Arti

相關問題