ServiceInstall 數據表
ServiceInstall 數據表是用來安裝服務,且具有下列數據行。
列 | 類型 | 鑰匙 | 空 |
---|---|---|---|
ServiceInstall | 識別碼 | Y | N |
名字 | 格式化 | N | N |
DisplayName | 格式化 | N | Y |
ServiceType | DoubleInteger | N | N |
StartType | DoubleInteger | N | N |
ErrorControl | DoubleInteger | N | N |
LoadOrderGroup | 格式化 | N | Y |
依賴 | 格式化 | N | Y |
StartName | 格式化 | N | Y |
密碼 | 格式化 | N | Y |
參數 | 格式化 | N | Y |
元件_ | 識別碼 | N | N |
描述 | 格式化 | N | Y |
列
-
ServiceInstall
-
這是數據表的主鍵。
-
名稱
-
此數據列是提供要安裝之服務名稱的字串。 字串的最大長度為 256 個字元。 服務控制管理員資料庫會保留服務名稱中的字元大小寫,但服務名稱的比較不區分大小寫。 正斜線 (/) 和反斜線 (\) 是無效的服務名稱字元。
-
DisplayName
-
此數據行是使用者介面程式用來識別服務的可當地語系化字串。 字串的最大長度為 256 個字元。 服務控制管理員會保留顯示名稱的大小寫,但顯示名稱比較不區分大小寫。
-
ServiceType
-
此數據列是一組指定服務類型的位旗標。 必須在此數據行中指定下列其中一個服務類型。
服務類型 價值 描述 SERVICE_WIN32_OWN_PROCESS 0x00000010 Microsoft執行自己進程的 Win32 服務。 SERVICE_WIN32_SHARE_PROCESS 0x00000020 共用進程的 Win32 服務。 SERVICE_INTERACTIVE_PROCESS 0x00000100 與桌面互動的 Win32 服務。 這個值不能單獨使用,而且必須新增至上述兩種類型之一。使用這個旗標時,StartName 數據行必須設定為 LocalSystem 或 Null。 不支援下列類型的服務。
服務類型 價值 描述 SERVICE_KERNEL_DRIVER 0x00000001 驅動程式服務。 SERVICE_FILE_SYSTEM_DRIVER 0x00000002 檔系統驅動程式服務。 -
StartType
-
此數據行是一組位旗標,可指定何時啟動服務。 必須在此數據行中指定下列其中一種服務啟動類型。
服務啟動類型 價值 描述 SERVICE_AUTO_START 0x00000002 服務會在啟動系統期間啟動。 SERVICE_DEMAND_START 0x00000003 當服務控制管理員呼叫 StartService 函式時,服務就會啟動。 SERVICE_DISABLED 0x00000004 指定無法再啟動的服務。 Windows Installer 無法使用SERVICE_BOOT_START和SERVICE_SYSTEM_START選項。
-
ErrorControl
-
如果服務在啟動期間無法啟動,這個數據行會指定啟動程式所採取的動作。 這些值會影響已安裝服務的 ServiceControl StartService 事件。 必須在此數據行中指定下列其中一個錯誤控制旗標。
將常數 msidbServiceInstallErrorControlVital (value = 0x08000) 新增至下表中的旗標,指定如果無法將服務安裝到系統中,整體安裝應該會失敗。
錯誤控制旗標 價值 啟動程序動作 SERVICE_ERROR_IGNORE 0x00000000 記錄錯誤並繼續進行啟動作業。 SERVICE_ERROR_NORMAL 0x00000001 記錄錯誤、顯示消息框,並繼續啟動作業。 SERVICE_ERROR_CRITICAL 0x00000003 如果有可能,而且系統會以已知良好的最後一個組態重新啟動,則會記錄錯誤。 如果啟動最後一個已知良好的組態,啟動作業就會失敗。 -
LoadOrderGroup
-
此資料列包含字串,此字串會命名此服務所屬的載入順序群組。 如果服務不屬於群組,請指定 null 或空字串。
-
相依性
-
此數據行是服務名稱的清單,或載入排序群組的清單,系統必須在此服務之前啟動。 以 Null 分隔清單中的名稱。 如果服務沒有相依性,請指定 Null 或空字串。 使用語法 [~] 插入 Null。 對群組的相依性表示,如果嘗試啟動群組的所有成員之後,至少一個群組成員正在執行,此服務就可以執行。
例如,若要要求系統啟動 service1 和 service2,在啟動 ServiceInstall 數據行中列出的服務之前,請在 [相依性] 數據行中輸入 service1[~]service2[~][~] 。 標識元 service1 和 service2 必須發生在數據表的主鍵中,或是已安裝的服務名稱。
您必須在組名前面加上 +,才能區分它們與服務名稱。 若要要求系統啟動 service1 和至少一個排序群組 MyGroup 成員,再啟動 ServiceInstall 數據行中列出的服務,請輸入 service1[~]+MyGroup[~][~]。
-
StartName
-
服務會以這個數據行中的字串所指定的名稱登入。 如果服務類型是SERVICE_WIN32_OWN_PROCESS請使用帳戶名稱的格式:DomainName\UserName。 如果帳戶屬於內建網域,則允許指定 .\UserName。 如果服務類型是SERVICE_WIN32_SHARE_PROCESS或SERVICE_INTERACTIVE_PROCESS,則必須使用LocalSystem帳戶。 如果 StartName 指定為 null,則 createService 函式會使用 LocalSystem 帳戶,因此大部分服務都會將此數據行保留空白。
-
密碼
-
此字串是 StartName 資料行中所指定帳戶名稱的密碼。 請注意,用戶必須具有以服務身分登入的許可權。 如果 StartName 為 null 或空字串,則服務沒有密碼。 LocalSystem 的 Startname 為 null,因此此實例中的密碼為 null,因此大部分服務都會將此數據行保留空白。
請注意,刪除以使用者名稱和密碼安裝的服務之後,安裝程式無法復原服務,而不需要先使用自定義動作來取得密碼。 安裝程式可以取得服務的所有必要資訊,但密碼除外,密碼會儲存在系統受保護的部分。 自定義動作會藉由提示使用者、從資料庫讀取屬性或讀取檔案來取得密碼。 然後,自定義動作必須呼叫 ChangeServiceConfig,才能提供密碼,然後再重新安裝服務。
Windows Installer 不會將輸入的值寫入記錄檔的 [密碼] 字段中。
-
自變數
-
此資料列包含執行服務所需的任何命令行自變數或屬性。
-
Component_
-
元件數據表之一數據行的外部索引鍵。 請注意,若要使用 InstallService 數據表安裝此服務,此元件的 KeyPath 必須是服務的可執行檔。
-
描述
-
此數據列包含所設定服務的可當地語系化描述。 如果此數據行保留空白,則安裝程式會使用服務的現有描述,如果有的話。 如需詳細資訊,請參閱 Microsoft Windows 軟體開發工具包 (SDK) 中的SERVICE_DESCRIPTION。 若要清除現有的描述,請在此數據行中輸入 “[~]”。 這會導致新服務或現有服務的空白描述。
言論
順序數據表中的 InstallServices 動作 處理此數據表中的資訊。 如需使用 時序表的詳細資訊,請參閱使用時序表 。
下表具有 Win32 CreateService 函式的大部分參數。
雖然可以使用使用者介面來指定將服務安裝為從來源執行,但安裝程序實際上不支援這種類型的安裝。 使用本機系統許可權等級執行的服務必須安裝,才能從本機硬碟執行。 避免安裝模擬特定使用者許可權的服務,因為這可能會將安全性數據寫入記錄檔或系統登錄中。 這可能會在重新啟動系統時造成安全性問題、密碼衝突或組態數據遺失。
若要在卸載期間刪除服務,ServiceControl 數據表中必須有對應的服務記錄,而且 msidbServiceControlEventUninstallDelete 旗標必須出現在 [事件] 數據行中。 安裝程式不會在卸載期間刪除 ServiceInstall 數據表中的服務,而 ServiceControl 數據表中沒有這個專案。
如需如何保護服務的資訊,請參閱 MsiLockPermissionsEx 資料表。
驗證