翻譯|使用教程|編輯:況魚杰|2019-11-21 11:09:38.910|閱讀 1401 次
概述:使用InstallShield創建的基本MSI項目是數據庫驅動的,而不是腳本驅動的。MSI數據庫的一個功能是有序列表,這些序列表定義了要執行和顯示的動作以及對話框的順序。 本文介紹了如何定義Windows Installer條件使您能夠指定僅在首次安裝,完全卸載或僅在安裝特定功能時才執行操作。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
InstallShield是構建Windows安裝程序和MSIX包并直接在Microsoft Visual Studio中創建安裝的最快速最簡單的方法。借助InstallShield,您可以快速適應行業的變化,更快地進入市場并提供引人入勝的客戶體驗。
使用InstallShield創建的基本MSI項目是數據庫驅動的,而不是腳本驅動的。MSI數據庫的一個功能是有序列表,這些序列表定義了要執行和顯示的動作以及對話框的順序。
本文介紹了如何定義Windows Installer條件使您能夠指定僅在首次安裝,完全卸載或僅在安裝特定功能時才執行操作。
安裝與卸載
基本MSI設置不使用顯式腳本,而是使用序列表來確定要執行的操作以及它們發生的順序。特別是,InstallUISequence和InstallExecuteSequence表(用戶界面和執行序列)包含在常規安裝期間要執行的操作的有序列表。(也就是說,通過雙擊MSI數據庫圖標或通過運行命令msiexec / i ProductName.msi開始安裝)
當使用MSI序列表時,一個重要的想法是,相同的序列用于首次安裝和維護安裝(包括卸載)。 沒有單獨的卸載順序。因此,默認情況下,您在安裝序列中計劃的所有自定義操作都將同時運行以進行安裝和卸載。當然,問題在于這種行為對于許多自定義操作是不被期望的,尤其是那些涉及啟動或操作由安裝程序安裝的文件的操作。
為確保操作僅針對首次安裝運行,您可以使用條件Not Installed。(請記住,屬性名稱區分大小寫。常見的錯誤是將屬性名稱的大小寫誤認為是Not INSTALLED;因為大寫屬性INSTALLED通常是未定義的,因此條件Not Installed才會成功。)條件未安裝適用于例如啟動自述文件或正在安裝的應用程序的自定義操作。
如果已經安裝了當前產品(當前安裝是按用戶安裝的按機器安裝的),則將設置Installed屬性。(請注意,Windows Installer還定義了一個ProductState屬性,該屬性還使您能夠檢測是否為其他用戶安裝了當前產品。)如果您有應針對任何維護操作運行的自定義操作(修改,修復或刪除,但不是首次安裝),則可以使用Installed條件。
要檢測完全卸載,可以在某種情況下使用REMOVE屬性。REMOVE屬性設置為要刪除的功能的逗號分隔列表。在完全卸載期間,將REMOVE設置為特殊字符串值ALL,因此可以使用條件REMOVE ="ALL"來檢測完全卸載。(請注意,此條件僅在InstallExecuteSequence表中的InstallValidate操作之后才有效。)
用于檢測用戶界面序列中的完全卸載的另一個選項是使用_IsMaintenance屬性。標準MaintenanceType對話框提供了Modify,Repair和Remove單選按鈕。用戶的單選按鈕選擇存儲在_IsMaintenance屬性中,值為更改,重新安裝或刪除之一。 然后,在用戶界面序列中,可以在維護類型對話框之后的任何位置為操作指定條件_IsMaintenance =“Remove”。 (由于_IsMaintenance是一個私有屬性-它的名稱包含小寫字母-當執行從用戶界面序列切換到Execute序列時,它將重置其值,因此不能在Execute序列中使用它來檢測安裝類型。)
總結
可以使用以下條件來檢測不同的安裝模式:
首次安裝:Not Installed
任何維護類型:Installed
卸載:REMOVE =“ ALL”(在InstallValidate之后)
功能和組件條件
除了檢測整個產品的不同安裝類型之外,有時還可以檢測是否正在安裝或刪除特定功能部件或組件。為此,Windows Installer在使用Condition數據類型的MSI數據庫字段中提供了特殊的語法,例如任何序列表中記錄的Condition字段。
特征條件的最常用類型是特征動作類型,其中表達式&FeatureName設置為一個數值,該數值指示要對稱為FeatureName的特征執行的操作。&FeatureName的可能值如下(在CostFinalize操作之后有效):
-1 | 無動作(功能不變) |
1 | 廣告功能 |
2 | 未安裝功能(已卸載) |
3 | 本地安裝的功能 |
4 | 已安裝功能以從源代碼運行 |
例如:
要檢測是否已選擇名為FeatureA的功能在本地安裝,或者尚未在本地安裝,則可以使用條件&FeatureA = 3。您可以在序列表中的操作上使用此條件,也可以在(例如)CustomSetup或SetupType對話框的下一步按鈕上的NewDialog控件事件上使用此條件。
使用功能操作條件,您可以確定功能的安裝狀態是否正在更改(在上面的示例中,從未安裝更改為本地安裝)。如果要確定功能部件的狀態,則無論該功能部件的狀態是否正在更改,都可以使用功能部件狀態條件。功能狀態條件使用!FeatureName = n形式,其中n是上表中的值之一。
同樣,Windows Installer定義了組件操作和組件狀態條件語法,分別為$ ComponentName = n和?ComponentName = n,其中n也是上表中的值之一。
其他注意事項
使用安裝和卸載時,還有一些其他注意事項:
如果用戶執行無提示或受限UI安裝,則Windows Installer僅執行執行序列中的操作。因此,無論附加在用戶界面上的任何條件如何,都將跳過在用戶界面序列中進行的任何操作。
與前一個注釋相關,如果用戶通過單擊添加/刪除程序面板上的刪除按鈕來啟動卸載(在Windows 2000或更高版本中),則僅執行執行序列中的操作。
在首次安裝過程中啟動文檔或可執行文件的自定義操作有時會按執行順序進行計劃; 但是,文檔或可執行文件的用戶界面通常不適用于靜默安裝。為確保操作僅在完整UI安裝期間運行,您可以使用UILevel屬性將本文中描述的條件與條件結合使用。對于完整UI安裝,UILevel屬性設置為5(對于靜默,基本UI和精簡UI安裝,其數值較低),因此可以使用諸如(未安裝)和(UILevel = 5)的條件。)以檢測使用完整用戶界面運行的首次安裝。
推薦文章:
如果您想要購買正版授權InstallShield,可以聯系咨詢相關問題。
關注慧聚IT微信公眾號???,了解產品的最新動態及最新資訊。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: