之前折騰了個C#的項目:
WLW (Windows Live Writer) Plugin–InsertSkydriveFiles
然后又弄了個對應的Installer:
【已解決】給一個C#的Dll庫的項目,制作msi安裝包 + 【已徹底搞懂原因】制作出來的msi的installer,在卸載程序的時候,在刪除本程序所創建的注冊表項的同時會把父級注冊表項刪除掉
生成的msi,是可以正常安裝的:
但是有個問題,當之前安裝了某個版本的InsertSkydriveFiles_Installer.msi之后,再去安裝新版本的InsertSkydriveFiles_Installer.msi,就會出現錯誤:
已經安裝了該產品的另一個版本。無法繼續安裝此版本。可以使用“控制面板”中“添加/刪除程序”來配置或刪除該產品現有版本
其值是False,含義雖然很明顯了,但還是去官網看看解釋:
RemovePreviousVersions Property
RemovePreviousVersions Property
Specifies whether an installer will remove previous versions of an application during installation. If this property is set to True and an earlier version is detected at installation time, the previous version’s uninstall function will be called.
Note
The installer checks UpgradeCode and ProductCode properties to determine whether the earlier version should be removed. TheUpgradeCode must be the same for both versions; theProductCode must be different.
The settings for the RemovePreviousVersions property are:
Setting Description False
The installer does not check for previous versions.
True
The installer checks for previous versions and uninstalls them if found.
可以看到,其還專門注釋了,說到之前版本和當前版本的UpgradeCode必須一樣,但是ProductCode必須不同,即程序的id一致,版本不一致,才可以。
然后又去看了看UpgradeCode and ProductCode的值:
感覺好像是,如果我每次新生成的msi的時候,沒有去改動UpgradeCode和ProductCode的話,那么好像版本變動,比如從4.2變化到4.3,好像都是沒有變化的,那么豈不是不符合此處的規定了。
不過先不管,先去試試把RemovePreviousVersions改為True,看看能否成功再說。
結果果然還是不行。
5.所以,去把ProductCode改變一下:
然后再重新生成msi試試效果,最后果然可以成功運行了:
【總結】
當用去運行,用C#的Installer生成的新版本的msi安裝文件時,出現錯誤:
已經安裝了該產品的另一個版本。無法繼續安裝此版本。可以使用“控制面板”中“添加/刪除程序”來配置或刪除該產品現有版本
的話,解決辦法是:
去Installer項目的"部署項目屬性"中,把RemovePreviousVersions設置為True,意思是,如果之前已安裝舊版本的話,會去檢測並卸載舊版本。
同時,要確保,前后兩次所生成的msi所用的:
UpgradeCode是一樣的,即同樣的值(其值舉例:{C7B39FE7-09DA-4635-83A9-E80421D91E36});
ProductCode是不同的值,是不一樣的(其值舉例:{32C3FA06-665B-4292-BF52-03465A59A8BF});
注:Installer會自動幫你生成UpgradeCode和ProductCode,而如果你之前就沒有改動過這兩個值的話,則不同的版本之間的UpgradeCode和ProductCode都一直是沒有變的,
所以就需要你去把ProductCode改變一下:
選中ProductCode后,其值的右邊會出現 (…)字樣,點擊它,然后在彈出對話框中點擊“新代碼”,即可生成新的值。
如此,最后生成的新版本的msi的安裝文件,就可以順利的,先自動卸載已安裝的舊版本,正常安裝新版本了。
【特別說明:如何打開Installer項目的屬性窗口,而非屬性頁】
1.先點擊當前某個文件,然后右擊選擇屬性,會打開屬性窗口:
2.然后再點擊對應的項目,屬性窗口會自動切換到項目的“部署項目屬性”:
3.否則,如果直接點擊項目,右擊選擇屬性:
4.正常打開Installer項目的屬性窗口后,就可以根據自己需要去安裝上述的解釋,設置對應的值了: