ServiceInstall 表
ServiceInstall 表用于安装服务,其中包含以下列。
列 | 类型 | 密钥 | Nullable |
---|---|---|---|
ServiceInstall | Identifier | Y | N |
名称 | Formatted | N | N |
DisplayName | Formatted | N | Y |
ServiceType | DoubleInteger | N | N |
StartType | DoubleInteger | N | N |
ErrorControl | DoubleInteger | N | N |
LoadOrderGroup | Formatted | N | Y |
依赖项 | Formatted | N | Y |
StartName | Formatted | N | Y |
密码 | Formatted | N | Y |
参数 | 格式化 | N | Y |
Component_ | Identifier | N | N |
说明 | Formatted | N | Y |
列
-
ServiceInstall
-
这是表的主键。
-
Name
-
此列是指定要安装的服务名称的字符串。 该字符串的最大长度为 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(值 = 0x08000)添加到下表中的标志会指定如果无法将服务安装到系统中,则整个安装应该失败。
错误控制标志 值 启动程序的操作 SERVICE_ERROR_IGNORE 0x00000000 记录错误并继续执行启动操作。 SERVICE_ERROR_NORMAL 0x00000001 记录错误,显示消息框,并继续执行启动操作。 SERVICE_ERROR_CRITICAL 0x00000003 记录错误(如果可能),并使用最近一次的正确配置重启系统。 如果最近一次的正确配置正在启动,则启动操作会失败。 -
LoadOrderGroup
-
此列包含用于命名此服务所属负载排序组的字符串。 如果该服务不属于某个组,则指定 null 或空字符串。
-
Dependencies
-
此列是系统在启动此服务之前必须启动的服务或负载排序组的名称列表。 用 Null 分隔列表中的名称。 如果该服务没有依赖项,则指定 Null 或空字符串。 使用语法 [~] 插入 Null。 依赖于某个组意味着,如果在尝试启动该组的所有成员之后至少有一个组成员正在运行,则此服务可以运行。
例如,若要要求系统先启动 service1 和 service2,然后再启动 ServiceInstall 列中列出的服务,请在 Dependencies 列中输入 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 帐户,因此大多数服务将此列留空。
-
Password
-
此字符串是 StartName 列中指定的帐户名的密码。 请注意,用户必须有权以服务形式登录。 如果 StartName 为 null 或空字符串,则服务没有密码。 LocalSystem 的 Startname 为 null,因此此实例中的密码为 null,正因如此,大多数服务将此列留空。
请注意,在删除使用用户名和密码安装的服务后,在不首先使用自定义操作获取密码的情况下,安装程序无法回滚该服务。 安装程序可以获取有关服务的所有必要信息,但密码除外,密码存储在系统的受保护部分中。 自定义操作通过提示用户、从数据库读取属性或读取文件来获取密码。 然后,自定义操作必须调用 ChangeServiceConfig 来提供密码,然后重新安装服务。
Windows Installer 不会将 Password 字段中输入的值写入日志文件。
-
Arguments
-
此列包含运行服务所需的任何命令行参数或属性。
-
Component_
-
Component 表第一列的外键。 请注意,若要使用 InstallService 表安装此服务,此组件的 KeyPath 必须是该服务的可执行文件。
-
Description
-
此列包含正在配置的服务的可本地化说明。 如果将此列留空,安装程序将使用服务的现有说明(如果有)。 有关详细信息,请参阅 Microsoft Windows 软件开发工具包 (SDK) 中的 SERVICE_DESCRIPTION。 若要清除现有说明,请在此列中输入“[~]”。 这会导致为新服务或现有服务使用空白说明。
备注
顺序表中的 InstallServices 操作将处理此表中的信息。 有关使用顺序表的信息,请参阅使用顺序表。
此表包含 Win32 CreateService 函数的大部分参数。
尽管可以使用用户界面来指定以“从源运行”的方式安装服务,但安装程序实际上并不支持这种类型的安装。 必须安装使用本地系统权限级别运行的服务才能从本地硬盘驱动器运行。 避免安装模拟特定用户权限的服务,因为这可能会将安全数据写入日志或系统注册表。 这可能会导致安全问题、密码冲突或者系统重启时丢失配置数据。
若要在卸载期间删除某个服务,ServiceControl 表中必须存在该服务的相应记录,并且 msidbServiceControlEventUninstallDelete 标志必须出现在 Event 列中。 在卸载期间,如果 ServiceControl 表中不存在此条目,则安装程序不会删除 ServiceInstall 表中的相应服务。
有关如何保护服务的信息,请参阅 MsiLockPermissionsEx 表。
验证