ServiceInstall 表

ServiceInstall 表用于安装服务,并具有以下列。

类型 密钥 Nullable
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
Component_ 标识符 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安装程序无法使用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 列中列出的服务之前,请在 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 帐户,因此,大多数服务将此列留空。

密码

此字符串是 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 表

验证

ICE03
ICE06
ICE32
ICE45
ICE46
ICE66
ICE69