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
组件_ 标识符 N N
描述 N Y

ServiceInstall

这是表的主键。

路径名

此列是提供要安装的服务名称的字符串。 字符串的最大长度为256个字符。 服务控制管理器数据库保留服务名称中字符的大小写,但服务名称的比较不区分大小写。 正斜杠 (/) 和反斜杠 (\) 是无效的服务名称字符。

DisplayName

此列是用户界面程序用来标识服务的可本地化字符串。 字符串的最大长度为256个字符。 服务控制管理器保留显示名称的大小写,但显示名称比较不区分大小写。

ServiceType

此列是指定服务类型的一组位标志。 必须在此列中指定以下服务类型之一。

服务类型 描述
服务 _ WIN32 _ 自己的 _ 进程 0x00000010 运行自己的进程的 Microsoft Win32 服务。
服务 _ WIN32 _ 共享 _ 进程 0x00000020 共享进程的 Win32 服务。
服务 _ 交互 _ 过程 0x00000100 与桌面交互的 Win32 服务。 此值不能单独使用,必须添加到这两个以前的类型之一。使用此标志时,必须将 StartName 列设置为 LocalSystem 或 null。

不支持以下类型的服务。

服务类型 描述
服务 _ 内核 _ 驱动程序 0x00000001 驱动程序服务。
服务 _ 文件 _ 系统 _ 驱动程序 0x00000002 文件系统驱动程序服务。

StartType

此列是一组用于指定启动服务的时间的位标志。 必须在此列中指定以下类型的服务启动之一。

服务启动类型 描述
服务 _ 自动 _ 启动 0x00000002 服务在系统启动期间启动。
服务 _ 需求 _ 开始 0x00000003 服务控制管理器调用 StartService 函数时,将启动一个服务。
_已禁用服务 0x00000004 指定不能再启动的服务。

Windows Installer 无法使用 "服务 _ 启动 _ 启动" 和 "服务 _ 系统启动" _ 选项。

ErrorControl

如果服务在启动过程中无法启动,此列将指定启动程序执行的操作。 这些值影响已安装服务的 ServiceControl StartService 事件。 必须在此列中指定以下错误控制标志之一。

如果将常量 msidbServiceInstallErrorControlVital (值 = 0x08000) 添加到下表中的标志,则指定在服务无法安装到系统的情况下,整体安装应该会失败。

错误控制标志 启动程序的操作
服务 _ 错误 _ 忽略 0x00000000 记录错误并继续执行启动操作。
服务 _ 错误 _ 正常 0x00000001 记录错误,显示一个消息框,并继续执行启动操作。
服务 _ 错误 _ 严重 0x00000003 记录错误(如果可能),并且系统在已知良好的最后一个配置的情况重启。 如果正在启动最后一个已知良好的配置,则启动操作将失败。

LoadOrderGroup

此列包含名称此服务所属的加载顺序组的名称的字符串。 如果服务不属于组,请指定 null 或空字符串。

此列是在此服务之前系统必须启动的服务或加载顺序组的名称列表。 按 Null 分隔列表中的名称。 如果服务没有依赖项,则指定 Null 或空字符串。 使用语法 [ ~ ] 插入 Null。 组的依赖关系意味着,如果在尝试启动组的所有成员后,至少有一个成员正在运行,则此服务可以运行。

例如,若要在启动 ServiceInstall 列中列出的服务前要求系统启动 service1 和 service2,请在 [ ~ ] [ ~ ] [ ~ ] "依赖关系" 列中输入 service1 service2。 标识符 "service1" 和 "service2" 必须出现在表的主键中或者是已经安装的服务的名称。

必须使用 + 作为组名的前缀,以便可以从服务名称中区分它们。 若要在启动 "ServiceInstall" 列中列出的服务之前要求系统启动 service1 和至少一个排序组 MyGroup 成员,请输入 "service1 [ ~ ] + MyGroup" [ ~ ] [ ~ ] 。

StartName

该服务作为此列中的字符串所提供的名称登录。 如果服务类型为服务 _ WIN32 _ 自己的 _ 进程,请使用以下格式的帐户名称: DomainName \ UserName。 如果帐户属于允许指定的内置域,则为。 \用户名. 如果服务类型为服务 _ WIN32 _ 共享 _ 进程或服务 _ 交互 _ 进程,则必须使用 LocalSystem 帐户。 如果 StartName 被指定为 null,并且大多数服务将此列留空, CreateService 函数将使用 LocalSystem 帐户。

权限

此字符串是在 StartName 列中指定的帐户名称的密码。 请注意,用户必须具有作为服务登录的权限。 如果 StartName 为 null 或为空字符串,则该服务没有密码。 LocalSystem 的 Startname 为 null,因此此实例中的密码为空,因此大多数服务将此列留空。

请注意,删除使用用户名和密码安装的服务后,安装程序将无法在不首先使用自定义操作获取密码的情况下回滚服务。 安装程序可以获取除密码之外的服务的所有必要信息,这些信息存储在系统的受保护部分中。 自定义操作通过提示用户、从数据库读取属性或读取文件来获取密码。 然后,自定义操作必须先调用 ChangeServiceConfig,以提供密码,然后再重新安装该服务。

Windows Installer 不会将输入到密码字段的值写入日志文件。

形参

此列包含运行服务所需的任何命令行参数或属性。

组件_

组件表的第一列的外部键。 请注意,若要使用 InstallService 表安装此服务,此组件的 KeyPath 必须是该服务的可执行文件。

2008

此列包含所配置服务的可本地化说明。 如果此列为空,则安装程序将使用该服务的现有说明(如果存在)。 有关详细信息,请参阅 _ Microsoft Windows 软件开发工具包中的服务说明 (SDK) 。 若要清除现有说明,请 [ ~ ] 在此列中输入 ""。 这会生成新服务或现有服务的空白说明。

备注

序列表中的 InstallServices操作处理此表中的信息。 有关使用 序列表 的信息,请参阅 使用序列表

此表包含 Win32 CreateService 函数的大部分参数。

尽管可以使用用户界面指定将服务作为源服务器安装,但安装程序并不真正支持这种类型的安装。 必须安装以本地系统权限级别运行的服务才能从本地硬盘上运行。 避免安装模拟特定用户的权限的服务,因为这可能会将安全数据写入日志或系统注册表中。 在系统重新启动时,这可能会造成安全问题、密码冲突或配置数据丢失。

若要在卸载过程中删除服务, ServiceControl 表 中必须存在该服务的相应记录,并且 msidbServiceControlEventUninstallDelete 标志必须出现在事件列中。 在卸载过程中,安装程序不会删除 ServiceInstall 表中的服务,而不会在 ServiceControl 表中使用此项。

有关如何保护服务的详细信息,请参阅 MsiLockPermissionsEx 表

验证

ICE03
ICE06
ICE32
ICE45
ICE46
ICE66
ICE69