撰寫自訂動作
下表列出五個用來符合範例規格的自訂動作:ProcessAccounts、UninstallAccounts、CreateAccounts、RemoveAccounts 和 RollbackAccounts。 所有這些自訂動作都位於儲存在二進位表的動態連結程式庫中。 Windows Installer SDK 中會提供包含範例自訂動作之動態連結程式庫的 C++ 原始程式碼。 ProcessAccounts 和 UninstallAccounts 位於 Process.cpp 檔案中。 CreateAccount 位於 Create.cpp 檔案中。 RemoveAccount 和 RollbackAccount 位於 Remove.cpp 檔案中。 這些原始程式檔可用來建立檔案Process.dll、Create.dll和Remove.dll。
由於建立或移除使用者帳戶需要提高的許可權,因此必須在系統內容中 執行的延後執行自訂動作 ,才能建立、移除或復原使用者帳戶。 立即執行的自訂動作 ProcessAccounts 和 UninstallAccounts 會產生延遲的自訂動作,以建立、移除或復原使用者帳戶:CreateAccount、RemoveAccount 和 RollbackAccount。
由於延後自訂動作無法讀取資料庫資料表中的資訊,因此 ProcessAccounts 和 UninstallUserAccouts 必須設定 CustomActionData 屬性,才能將 UserAccounts 資料表中的資訊傳遞至延後自訂動作,如 取得延後執行自訂動作的內容資訊中所述。 當安裝程式執行執行腳本時,延後自訂動作會根據 CustomActionData 屬性中的資訊來處理使用者帳戶。
由於所有自訂動作都位於儲存在 Binary 資料表中的動態連結程式庫中,因此它們都會在其基底數數值型別中包含 msidbCustomActionTypeDll 和 msidbCustomActionTypeBinaryData 常數。 ProcessAccounts 和 UninstallAccounts 是純 自訂動作類型 1的範例。 如需其他自訂動作類型的資訊,請參閱 所有自訂動作類型的摘要清單。
CreateAccount 和 RemoveAccount 會 順延強制 不允許服務模擬特定使用者的自訂動作。 這些自訂動作包括 msidbCustomActionTypeInScript 和 msidbCustomActionTypeNoImpersonate 常數,以指定這些 自訂動作的腳本內執行選項。
RollbackAccount 是 復原自訂動作 ,只會在 復原安裝期間移除使用者帳戶。 RollbackAccount 包含 msidbCustomActionTypeInScript 和 msidbCustomActionTypeRollback 常數,以指定這些 自訂動作的腳本內執行選項。
這些自訂動作可能會處理敏感性資料,例如使用者密碼,而不應該寫入記錄檔。 因此,延遲的自訂動作應該會在自訂動作類型中包含 msidbCustomActionTypeHideTarget。 延遲自訂動作的名稱也需要新增至Property 資料表中的MsiHiddenProperties屬性清單,因為立即自訂動作使用 CustomActionData 屬性將資料傳遞至延後自訂動作的方式。
自訂動作 | DLL 進入點 | 自訂動作類型 |
---|---|---|
ProcessAccounts | Process.dll中的 ProcessUserAccounts。 | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData = 1 |
UninstallAccounts | Process.dll中的 UninstallUserAccounts。 | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData = 1 |
CreateAccount | Create.dll中的 CreateUserAccount。 | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate + msidbCustomActionTypeHideTarget = 11265。 |
RemoveAccount | Remove.dll中的 RemoveUserAccount。 | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate + msidbCustomActionTypeHideTarget = 11265。 |
RollbackAccount | Remove.dll中的 RemoveUserAccount。 | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeInScript + msidbCustomActionTypeRollback + msidbCustomActionTypeHideTarget = 9473。 |