2014-04-04 50 views
5

因此,我有一個windows服務,可以在一臺服務器上安裝多個實例。安裝程序需要能夠升級單個實例。安裝程序使用實例轉換,但我不確定如何根據需要進行主要升級。WiX - 對多實例安裝進行重大升級

對於重大升級的工作,我的理解是,我應該有產品代碼的變化,所以實例以這種形式定義:

<Instance ProductCode="*" 
      UpgradeCode="{SOMEGUID}" 
      ProductName="Instance 1" 
      Id="Instance1"/> 

微星可以啓動通過安裝一個新的實例:

msiexec.exe /i "installer.msi" TRANSFORMS=:Instance1 MSINEWINSTANCE=1 

然而,經過一番搜索,我發現運行在特定的情況下升級的唯一途徑是這樣的格式:

msiexec.exe /i "installer.msi" /n {PRODUCTCODE} REINSTALL=ALL REINSTALLMODE=vamus 

這個問題是,如果產品代碼是自動生成的主要升級,那麼我不知道它是什麼,所以我不能傳遞給命令參數。

有沒有辦法使用實例的UpgradeCode或InstanceID或ProductCode啓動升級?因爲這兩者都會保持靜態。或者,我可以啓動沒有參數的msi,在UI對話框中選擇現有實例(通過檢查註冊表),並設置適當的屬性以強制msi進入該實例的升級模式?

+0

您可能會發現這有幫助:http://sklyarenko.net/blog/2011/09/14/revisited-multiple-instance/ –

+0

在我看來,一旦每個實例安裝,它是一個產品的產品代碼。如果你正在進行升級,那麼你的新產品只需要進行一次無聊的重大升級,然後用升級表填充升級表,以替換以前應該替換的任何產品。並不是說我對實例有很多瞭解,但是您是否嘗試了使用升級表的傳統方法,這些升級表會導致您的新實例升級您的每個舊實例。你是否說你不能單獨升級每個產品,因爲它們都具有相同的升級代碼?同一版本? – PhilDW

+0

只是爲了讓您知道,您可以通過PowerShell在給定機器上獲得**產品代碼**,**升級代碼**和**產品名稱**的完整列表** ** [**我找到安裝的MSI文件的升級代碼?**](https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095#46637095)。 –

回答

1

這是我到目前爲止已經做了處理3種獨立的情況下升級:

<InstanceTransforms Property="Upgrade"> 
    <Instance Id="I01" ProductCode="*" ProductName="Product Instance 1" UpgradeCode="55a25a09-5979-438d-91dd-67755012a288"/> 
    <Instance Id="I02" ProductCode="*" ProductName="Product Instance 2" UpgradeCode="a27eb2e5-9aa8-4d09-b6c0-df717875c310"/> 
    <Instance Id="I03" ProductCode="*" ProductName="Product Instance 3" UpgradeCode="d705720d-3703-4b17-817e-bd51edd9abea"/> 
</InstanceTransforms> 

雖然我的屬性提升是一個固定的GUID。有了這個,我可以處理與單獨使用這條線 - 用於新安裝的更新信息3分的情況下,添加MSINEINSTANCE = 1-:

MSIEXEC/I MyProduct.msi MSINEWINSTANCE = 1變換= 「:I01」

+0

這或多或少正是我最終做的。我不能肯定地說這個問題在問題解決的時候能否奏效,但自那時以來,wix多實例支持已經走過了一段很長的路,現在確實可行。 – AndyK

8

敢肯定你需要爲這個產品代碼因爲升級代碼標識系列產品,而不是單一的一個。

火起來PowerShell的並運行此命令來獲得安裝的產品與產品代碼列表:

Get-WmiObject -Class win32_product 

這是一個不同的方式來獲得以表格格式的輸出(IdentifyingNumber是ProductCode):

Get-WmiObject Win32_Product | Format-Table IdentifyingNumber, Name, Version 

您還可以在編譯的M的Property表中找到產品代碼SI採用逆戟鯨(MSI SDK tool):

enter image description here

+0

另請參閱:http://stackoverflow.com/a/24340339/129130 –

+0

Orca工具爲我做到了! – Antebios