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 列中列出的服务之前,请在 Dependencies 列中输入 service1[~]service2[~][~][~] 。 标识符 service1 和 service2 必须出现在表的主键中,或者是已安装的服务的名称。
必须使用 + 为组名称添加前缀,以便它们能够与服务名称区分开来。 若要要求系统在启动 ServiceInstall 列中列出的服务之前启动 service1 和至少一个排序组的成员,请输入 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 表。
验证