2014-10-09 80 views
0

我有一個使用命令行的腳本NSIS:重置重新安裝並REINSTALLMODE標誌的重大升級

msiexec.exe /i installer.msi REINSTALL=ALL REINSTALLMODE=vdmus

微星使用維克斯建。這對小型升級正常工作,但主要升級失敗。

所以我想知道是否有在維克斯的方式重置REINSTALLREINSTALLMODE標誌一旦我們發現我們正在做一個重大的升級?

回答

4

主要升級不使用REINSTALL或REINSTALLMODE。爲次要升級而構建的MSI具有與其更新版本相同的ProductCode(等等),而爲主要升級而構建的MSI不具有相同的ProductCode。因此,要進行重大升級,您只需以「常規」方式啓動MSI,對於次要升級,您可以使用REINSTALL和REINSTALLMODE啓動MSI文件。您需要兩條獨立的命令行,並在知道自己正在執行什麼樣的安裝時使用適當的命令行。這是最安全也可能唯一要做的事情。

順便說一句,這與WiX無關 - 無論您用什麼工具構建MSI文件,都是如此。

+0

感謝您的回覆,您提出了兩條獨立的命令行,但無法區分NSIS中的主要升級和次要升級。因此,我想知道是否有一種方法可以在Wix中重置這些falgs。 – whywhywhy 2014-10-09 16:30:46

+0

你的文章說「一旦我們發現我們正在進行重大升級?」聽起來你已經知道如何檢測到重大升級。如果你不這樣做,那麼就沒有一個適用於這兩種情況的msiexec命令行。在啓動之前,人們通常會檢測它是次要還是主要升級的方式是:1)瞭解要安裝的MSI的ProductCode和UpgradeCode 2)調用MsiEnumRelatedComponents(.... UpgradeCode ....),如果您取回與您正在安裝的ProductCode相同的ProductCode,這是次要升級。如果不同,則進行重大升級。 – PhilDW 2014-10-09 19:58:01