並行安裝
並行安裝也稱為「巢狀安裝」,是 Windows Installer 已被取代的功能。 與並行安裝一起安裝的應用程式最終可能會失敗,因為客戶難以正確服務。 請勿使用並行安裝來安裝要發行至公用的產品。 當用於安裝不適合公開發行的應用程式時,並行安裝在受控制的公司環境中可能會有有限的適用性。 同時安裝檔是針對想要搭配非公用散發的應用程式使用並行安裝的套件作者所提供。
並行安裝動作會在目前正在執行的安裝期間安裝另一個 Windows Installer 套件。 並行安裝會藉由將並行安裝動作撰寫至 CustomAction 資料表 ,並將此自訂動作排程到順序資料表中,以新增至套件。 CustomAction 資料表的 [目標] 欄位包含並行安裝所使用的公用屬性設定字串。 CustomAction 資料表的 [來源] 欄位會識別並行封裝。 並行安裝動作只能重新安裝或移除目前應用程式安裝套件所安裝的應用程式。
並行安裝動作的類型是在 CustomAction 資料表的 [類型] 欄位中指定。 根據自訂動作類型,並行應用程式的封裝可以位於主要封裝的子儲存體中、以屬性所指定位置的檔案,或作為使用者電腦上公告的應用程式。 下列類型的自訂動作會執行並行安裝。
自訂動作類型 | Description |
---|---|
自訂動作類型 7 | 同時安裝位於安裝套件中的產品。 |
自訂動作類型 23 | 在目前來源樹狀結構中同時安裝安裝程式套件。 |
自訂動作類型 39 | 同時安裝公告的安裝程式套件。 |
並行安裝會共用與主要安裝相同的使用者介面和記錄設定。
並行安裝動作應該放在主要安裝動作順序的 InstallInitialize 動作 和 InstallFinalize 動作 之間。 復原主要安裝時,安裝程式也會復原並行安裝。 因為安裝程式結合了並行和主要安裝中的復原資訊,所以不需要搭配並行安裝動作使用 延後執行 。 所有變更都會在復原安裝時反轉。
並行安裝動作的傳回值與其他自訂動作的傳回值相同。 請參閱 自訂動作傳回值。
指定自動重新開機系統的標準或自訂動作,或要求使用者重新開機,也可以從並行安裝內執行重新開機或要求。
安裝程式開始並行安裝之後,它會鎖定所有其他安裝,直到並行安裝完成,並繼續主要安裝之前。 安裝程式只能以同步自訂動作的形式執行並行安裝。 請參閱 同步和非同步自訂動作。 自訂動作傳回處理選項中所述的選項旗標必須設定為 none (+0) 或msidbCustomActionTypeContinue (+64) 。
並行安裝動作可以安裝應用程式以在本機執行、從來源執行、重新安裝,或以與使用 MsiInstallProduct 進行一般安裝時相同的方式移除。 若要指定安裝類型,請將 ADDLOCAL、 ADDSOURCE、 REINSTALL或 REMOVE 屬性傳遞至並行安裝動作。
並行安裝動作可以撰寫成對,一個動作用於安裝,另一個動作用於移除並行安裝。 自訂動作類型 7或自訂動作類型 23通常用來安裝。 自訂動作類型 39通常用來在卸載父產品時移除並行安裝。 CustomAction 資料表中移除自訂動作的記錄可以有 [來源] 欄位中的產品代碼 GUID,而 [目標] 欄位中的 「REMOVE=ALL」。 這兩個自訂動作必須在具有互斥條件的動作順序資料表中撰寫。 例如,安裝產品的自訂動作在其 [條件] 欄位中可以有 [未安裝],而自訂動作會移除並行安裝在其 [條件] 欄位中的 REMOVE=「ALL」。
沒有方法可查詢套件的成本。 這會使並行安裝的成本變得困難。 資料列必須新增至 ReserveCost 資料表 ,以指出與並行安裝相關聯之元件的資料夾和最差大小寫成本。
並行安裝動作唯一可用的 自訂動作傳回處理選項 , (+0) 或 msidbCustomActionTypeContinue (+64) 。
請注意,父安裝無法呼叫自己的套件做為並行安裝動作。
請注意,如果每部電腦安裝嘗試執行個別使用者並行安裝,安裝程式預設會將父安裝註冊為個別使用者。 這可能會導致安裝程式不正確地移除應用程式,因為安裝程式會在實際註冊為每個使用者時,嘗試卸載每部電腦的應用程式。 若要強制並行安裝的狀態追蹤其父安裝的狀態,請在 CustomAction 資料表的 [目標] 資料行中輸入 ALLUSERS=「[ALLUSERS]」。 在此情況下,如果父系是每部電腦,則並行安裝是每部機器,如果父系是每個使用者,則並行安裝是每一位使用者。
撰寫並行安裝時,開發人員應該注意下列警告。
- 並行安裝無法共用元件。
- 系統管理安裝不能同時包含並行安裝。
- 修補和升級可能無法搭配並行安裝使用。
- 安裝程式可能無法適當地為並行安裝成本。
- 整合式 ProgressBar 無法與並行安裝搭配使用。
- 並行安裝無法安裝要公告的資源。
- 執行應用程式並行安裝的套件,也應該在卸載父產品時卸載並行應用程式。
若要防止將套件安裝為並行安裝,請將下列任一條件陳述式新增至 LaunchCondition 資料表。 這可防止由另一個安裝所執行的並行安裝動作安裝套件。 這不會防止 RemoveExistingProducts 動作移除套件。 另請參閱 ParentOriginalDatabase 屬性和 ParentProductCode 屬性。
"Not ParentProductCode"
"Not ParentOriginalDatabase"