2011-03-07 45 views
4

我已經創建了一個安裝包(通過WIX),它利用實例轉換來允許自己在一臺機器上多次安裝。沒有給予太多的思考,我還增加了對重大升級的支持(就像我之前做過很多次那樣)。Windows Installer實例轉換如何與升級交互?

今天,第一次安裝了該產品的新版本,並且行爲與我預期的並不完全相同:儘管安裝是針對新實例的,但似乎所有其他實例一箇舊版本)被卸載。

事後看來,這並不令人感到意外,因爲所有實例共享相同的升級代碼。根據FindRelatedProducts操作的文檔,該文件和版本是確定應將哪些產品作爲刪除目標的唯一標準。

所以問題是:我該如何編寫這個安裝包,以便在安裝新版本時,只升級目標實例,而其他實例保持獨立?

我懷疑答案可能是我應該完全刪除「主要升級」功能,但我已經看到幾個使用它的多實例安裝示例,所以我不確定。此外,我發現我可能沒有正確處理產品代碼,因爲它應該用版本號更新,但實例轉換使用固定的產品代碼。不知何故,我認爲這不是問題,但我想我應該提及它以防萬一。

非常感謝您的幫助或見解。

回答

3

我曾經使用InstallScript編寫過引導程序來支持類似的故事。這是在InstallShield包含此功能之前,並且基於我與他們共享的工作。

基本上,我的代碼做了很多工作,反映出實例轉換出MSI的存儲,然後查詢MSI API以瞭解哪些實例已安裝,以及當前MSI是否代表維護UI(相同的ProductCode和相同的PackageCode)或主要升級升級(不同ProductCode)或次要升級(相同ProductCode不同PackageCode)。

您可以更詳細地瞭解它:

Multiple Instance MSI's and InstallShield 12

這裏是它是如何工作的IS2009 +與引導程序UI的屏幕截圖的解釋。

InstallShield 2009 Beta Part I (Multiple Instances)

+0

感謝您的迴應,克里斯。唉,從閱讀這些帖子來看,我仍不清楚應該如何處理個案。你是否同意,如果我需要在不同版本中允許多個實例,那麼在包中創建「主要升級」不會滿足我的需求? – 2011-03-07 18:18:55

+0

您可以進行重大升級,但您必須記住每個實例都有自己的UpgradeCode系列,您需要能夠選擇要在哪個實例上執行升級。最後,您可以將X個實例安裝到具有不同版本和不同配置數據的不同目錄中。 – 2011-03-07 20:10:07

+0

嗨克里斯,你是什麼意思「每個實例都有自己的UpgradeCode系列」?不是每個實例具有相同的UpgradeCode,而是不同的* ProductCode *? – ayang 2011-03-17 20:55:57