3

我們有一個用Visual Studio 2005安裝程序編寫的安裝程序解決方案;調用C#自定義操作,並且我們遇到了一個已知問題,這是因爲升級時 - 舊的安裝代碼已運行,而不是新的代碼,因爲Windows正在運行自定義操作dll的緩存版本。我們知道這一點,雖然不是在月球上,但我們已經開始了。Windows安裝程序 - 強制用戶通過添加刪除?刪除程序

當我們發佈新版本的安裝程序並且用戶運行它時,我們現在希望它檢查是否安裝了ealier版本 - 如果有的話;我們想要顯示一條消息,告訴他們必須通過「添加/刪除程序」刪除舊版本。我們知道他們是否進行了手動卸載,然後進行安裝,然後一切都很好,而且很花哨 - 但不管多少次我們通過文檔告訴我們的用戶,這就是他們必須做的 - 他們仍然會嘗試運行新的安裝程序,而不必先刪除舊版本。

因此,我們想提出一條消息,從而迫使他們告訴他們!我看到一些安裝程序會這樣做(當然不知道使用什麼安裝程序包來創建這些程序包)。我們只有VS 2005,當然還有!

乾杯,

Chris。

回答

2

這可以通過自定義啓動條件來完成:

例如,如果搜索屬性是OLD_VERSION,啓動條件可以是這樣的:

條件:NOT OLD_VERSION

說明:An older version was found. Please uninstall it using "Programs and Features" in Control Panel.

當OLD_VERSION屬性設置爲一個值(舊版本被發現),本次推出的條件將顯示信息並停止安裝過程。

1

這不太合理。您是否記得在新設置中更改軟件包GUID?程序包GUID標識一個特定的安裝文件,如果兩個MSI文件具有相同的GUID,則它們將被視爲相同的文件,而不管它們是否是。這可能會觸發緩存的MSI版本被調用,各種地獄崩潰。

我會推薦閱讀「主要升級」,這將允許在安裝新版本之前自動卸載現有版本。在部署到野外之前,您還需要確保您瞭解該技術的基礎知識。你絕對不能使用任何MSI文件的完全相同的包GUID。這實際上總是錯誤的,並且會導致非常神祕的問題。

我不能在這裏寫出整個主要的升級解決方案,但基本上它涉及創作MSI的「升級」表來檢測要卸載的版本。您需要更改軟件包代碼,產品代碼和版本號(僅限3位數字)並保持相同的升級代碼(具有相同升級代碼的兩個MSI文件「知道」它們是相關的 - 即它們來自同一產品系列) 。查看MSDN的主要升級示例。

注意!如果您已向開發人員機器部署了帶有重複軟件包GUID的MSI文件,則它可能會有必須使用MSIZap或類似軟件進行清理的雜散安裝。謹慎使用,或者更好地在乾淨的測試系統上測試新的安裝程序。開發者系統充滿了垃圾,通常不適合MSI測試。

相關問題