0

我有一个 InstallScript 安装程序,它需要根据其当前值修改现有服务的启动类型(即自动、手动或禁用)。例如,如果当前启动类型为已禁用,它可能会保留它,否则它可能会将其设置为自动。

不幸的是,我找不到获取服务启动类型的方法。有一些函数可以检测服务是否存在 ( ServiceExistsService),并获取其当前的启动/停止状态 ( ServiceGetServiceState),但没有任何函数可以检索服务的参数。我认为也许调用其中一个函数会将SERVICE_IS_PARAMS结构填充为副作用,但似乎并非如此。

如何获取服务的启动类型?

4

2 回答 2

1

不完全推荐,但实际上应该很容易从HKLM\System\CurrentControlSet\Services\TheServiceName;中读取此信息。特别是 DWORDStart包含启动类型。请注意,直接在注册表中更改它至少在重新启动之前不太可能影响事情,因此使用 API 应用任何更改仍然很好。

或者,如果您想“正确”地做事,您可以声明访问Advapi32.QueryServiceConfig所需的结构和功能。这将支持任何更改注册表位置或底层存储的 Windows 版本(这是我不希望的,但应该被认为是可能的)。

于 2011-03-22T13:44:09.760 回答
0

另一个较慢但应该防故障的选项是使用参数“service MyServiceName get StartMode”启动 WMIC.exe 并将输出重定向到文件。然后,读取文件,第二行应该包含答案(自动/手动/禁用)

于 2015-10-29T09:43:02.187 回答