共用方式為


撰寫類別安裝程式和Co-Installers

注意

通用或行動驅動程式套件不支援本節所述的功能。 請參閱 使用通用 INF 檔案

本節包含撰寫 共同安裝程式時應遵循的指導方針:

顯示使用者介面

儲存裝置安裝狀態

載入可執行檔或 DLL 檔案

啟動其他進程或服務

如需如何撰寫共同安裝程式的詳細資訊,請參閱 撰寫共同安裝程式

顯示使用者介面

裝置安裝大部分會在系統 (非互動) 服務中執行。 因此,使用者無法看到或回應出現在此內容中的任何使用者介面。 在處理裝置安裝函式期間,在共同 安裝程式 中提供的任何對話方塊 , (DIF) 程式碼 會導致裝置安裝停止回應。

在大部分情況下,除了 完成安裝動作的處理期間,共同安裝程式不應該與使用者互動。 完成安裝動作會在互動式內容中執行。

注意 共同安裝程式不應該讓 DIF 程式碼失敗,並出現ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION,因為這會導致裝置安裝失敗。 如果裝置安裝需要使用者互動,共同安裝程式應該支援完成安裝動作。

儲存裝置安裝狀態

請勿在 共同安裝程式 動態連結程式庫內儲存裝置安裝狀態, (DLL) 。 因為 Windows 通常會在安裝程式處理 DIF 程式碼之後卸載 DLL,所以儲存在 DLL 內的任何狀態資訊都不會保存。

若要安全地保留裝置安裝程式狀態,類別安裝程式或共同安裝程式應該將狀態資訊儲存為登錄中裝置 驅動程式機碼 內的屬性。 若要這樣做,請遵循下列步驟:

  1. 若要擷取 裝置實例驅動程式金鑰的登錄控制碼,請使用 SetupDiOpenDevRegKey ,並將 KeyType 參數設定為 DIREG_DRV。

  2. 使用 SetupDiGetDevicePropertyKeys (擷取裝置實例的所有屬性金鑰,) 或 SetupDiGetDeviceProperty (擷取指定的裝置實例屬性) 金鑰。

  3. 使用 SetupDiSetDeviceProperty 儲存裝置實例屬性金鑰。

載入可執行檔或 DLL 檔案

如果您的 共同安裝程式 嘗試在 Windows 64 位平臺上載入未簽署的可執行檔或 DLL,作業系統會防止它載入此安全環境中。

若要透過類別安裝程式或共同安裝程式安全地載入可執行檔或 DLL,強烈建議您在數位簽署 的驅動程式套件中包含可執行檔或 DLL。 如需如何簽署驅動程式套件的詳細資訊,請參閱 驅動程式簽署

注意 類別安裝程式和共同安裝程式不得透過明確函式呼叫載入 DLL 模組,例如 LoadLibrary,或建立連結相依性。

啟動其他進程或服務

在裝置安裝期間,Windows 無法追蹤其他進程,而且無法判斷它們正在執行的工作或完成時間。 例如,當進程執行重大動作時,Windows 可以啟動或停止裝置或起始系統重新開機。

在大部分情況下, 共同安裝程式 不應該啟動其他進程或服務。 不過,安裝程式可以從透過完成安裝動作顯示的函式或對話方塊呼叫CreateProcess,安全地啟動其他進程。 安裝程式不得讓使用者在對話方塊或程式中繼續,直到建立的進程結束為止。