2012-03-23 170 views
1

首先讓我說,如果這對別人沒有意義,請讓我知道。WIX安裝程序安裝在多個位置,然後補丁

這是我的場景......我相信應該可能很簡單。比方說,我有一種情況,安裝到我的安裝程序:

Program Files/MyProduct/Development 

我也希望有相同的安裝程序安裝到:

Program Files/MyProduct/Test 

這可能與WIX?

另外,如果是這樣,我該如何去補丁?

回答

2

你試圖把你的手指稱爲多實例安裝程序。我在InstallShield中完成了很多工作,而不是WiX和Major/Minor升級,而不是修補。 Yan在WiX方面做得更多,包括撰寫一些博客文章。

但被警告,這並不簡單。 :-)

Revisited: Multiple Instance installations and patches

+0

嘿謝謝你的迴應!所以它看起來像這樣做,我必須根據安裝次數硬編碼產品ID?我不會提供這些信息,因爲用戶可能會在不同的目錄中安裝X個副本。合理? – aherrick 2012-03-24 15:31:34

+1

瞭解。現實情況是,您需要在前置X數個實例轉換的情況下進行實例轉換,並假定99%的用戶已經足夠了,或者您可以在運行時得到一個更復雜的boostrapper(EXE)生成+1轉換的故事。它可以完成,但是基礎設施要高得多,而且我還沒有遇到過任何人誰也不會對第一個故事感到滿意。例如,即使SQL服務器爲每臺計算機設置了50個實例的限制。 – 2012-03-24 15:44:08

+0

你會寫(可能在C#/ WinForms中)某種封裝,允許最終用戶輕鬆安裝多個實例嗎?我不認爲最終用戶需要知道變換等等。那裏有什麼想法? – aherrick 2012-03-27 22:37:51

0

以往的INSTALLDIRINSTALLLOCATION是它可以通過命令行或bootstapper設置一個公共屬性。例如: -

msiexec /i setup.msi INSTALLDIR="C:\Program Files\MyProduct\Test" 
0

下面應該讓你安裝並排的一面,我會建議你非常小心使用這種方法,只能用這個發展宗旨。

<?xml version="1.0" encoding="UTF-8"?> 

<?if $(var.MyApplication.Configuration) = Debug ?> 
<?define UpgradeCode = "<INSERT-DEVELOPMENT-GUID-HERE>" ?> 
<?else ?> 
<?define UpgradeCode = "<INSERT-RELEASE-GUID-HERE>" ?> 
<?endif ?> 

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="SetupProject1" UpgradeCode="$(var.UpgradeCode)"> 

這種方法使用引用的項目的configuratuion,所以對於這個工作,你需要引用的項目(如上圖所示爲所有MyApplication)。當您爲Debug進行編譯時,這將創建一個具有不同升級代碼的安裝程序。

然後您需要按照@KMoraz所述的方式部署。