防止舊套件透過較新版本安裝
如果使用者已安裝較新版本,則可以撰寫 Windows Installer 升級套件,讓主要升級無法安裝。 本主題中的程式只能防止執行主要升級套件所造成的降級。 此程式依賴 FindRelatedProducts Action,此動作只會在第一次安裝期間執行,而且不會在維護模式中執行(重新安裝)。 因為次要升級是使用重新安裝來執行,所以此程式無法用來判斷次要升級套件是否嘗試降級應用程式。 如需更多資訊,請參閱 應用程式的準備以進行未來的重大升級。
防止舊套件透過較新版本安裝
請在 升級表中的 UpgradeCode 資料行,輸入針對可能有資格接收此升級之相關產品的 UpgradeCode 屬性。
在 Upgrade Table的屬性列中,輸入 msidbUpgradeAttributesOnlyDetect 位元標誌。
將此套件所提供的升級版本輸入 Upgrade Table的 VersionMin 資料行。 將 VersionMax 資料行保留空白。
在 升級表的 ActionProperty 欄中,輸入由 FindRelatedProducts 動作 所要設定的屬性名稱。
將 SecureCustomProperties 屬性及 Upgrade Table 中 ActionProperty 欄中指定名稱的屬性新增至 Property Table。
在 InstallExecuteSequence 資料表中的 FindRelatedProducts 動作之後,新增 自定義動作類型 19。 在 CustomAction 資料表 中包含此動作的記錄,並在 [目標] 資料行中輸入要顯示的文字。 類型 19 自定義動作內建在安裝程式中,因此沒有程式代碼可撰寫。
將 ActionProperty 的名稱輸入至 InstallExecuteSequence Table 中記錄的 [條件] 資料行,其中包含 自定義動作類型 19。 只有在 升級數據表 偵測到已安裝較新版本時,才會執行自定義動作。
例如,將一組相關產品升級至 3.0 版的 Windows Installer 套件,可能會在其 Upgrade、CustomAction、InstallExecuteSequence和 Property 數據表中包含下列記錄。 群組中的所有相關產品都有相同的UpgradeCode,但如果電腦上已安裝3.0以上的版本,安裝程式就不會安裝此升級套件。 在此情況下,安裝程式會顯示錯誤訊息,且安裝失敗。 3.0 版升級套件會在 1.0 和 2.0 版的基礎上安裝。
升級代碼 VersionMin VersionMax 語言 屬性 刪除 ActionProperty {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} 3.0 msidbUpgradeAttributesOnlyDetect 發現新產品 {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} 1.0 3.0 msidbUpgradeAttributesVersionMinInclusive 找到升級 行動 類型 源 目標 CA1 19 已安裝更高版本的升級。 行動 條件 序列 尋找相關產品 200 CA1 找到新產品 201 財產 價值 SecureCustomProperties 新產品發現;升級發現