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

问题描述:

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

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

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

+0

也许这手工检索的启动类型将是最好的解决办法自定义操作。 – 2011-03-22 07:38:39

这不是完全推荐,但实际上应该很容易从HKLM\System\CurrentControlSet\Services\TheServiceName读取这些信息;尤其是DWORD Start包含启动类型。请注意,直接在注册表中更改它不会影响事情,至少在重新启动后才会影响事情,所以使用API​​应用任何更改仍然很好。

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

另一种选择,这是速度较慢,但​​应该是防差错,是启动WMIC.EXE与参数“服务服务名获得STARTMODE”,并将输出重定向到一个文件中。然后,阅读文件和二号线应包含答案(自动/手动/禁用)