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