我有一个InstallScript安装程序,需要根据其当前值修改现有服务的启动类型(即Automatic,Manual或Disabled)。例如,如果当前启动类型为Disabled,则可能会将其保留,否则可能会将其设置为Automatic。
不幸的是我无法找到获取服务启动类型的方法。有一些函数可以检测服务是否存在(ServiceExistsService
),并获取其当前的启动/停止状态(ServiceGetServiceState
),但没有任何内容可以检索服务的参数。我认为也许调用其中一个函数会将SERVICE_IS_PARAMS
结构填充为副作用,但情况似乎并非如此。
如何获得服务的启动类型?
答案 0 :(得分:1)
这并不是完全推荐的,但在实践中应该很容易从HKLM\System\CurrentControlSet\Services\TheServiceName
中读取这些信息;特别是DWORD Start
包含启动类型。请注意,直接在注册表中更改此内容不太可能影响到重启之后的事情,因此使用API应用任何更改仍然是好的。
或者,如果你想“正确”做事,你可以声明到达Advapi32.QueryServiceConfig所需的结构和功能。这将支持任何更改注册表位置或底层存储的Windows版本(我不希望这样,但应该被视为可能)。
答案 1 :(得分:0)
另一个选项,它较慢,但应该是防止故障的,是使用参数“service MyServiceName get StartMode"”来启动WMIC.exe。并将输出重定向到文件。然后,读取文件,第二行应包含答案(自动/手动/禁用)