如何从InstallShield获取服务的启动类型?
问题描述:
我有一个InstallScript安装程序,需要根据当前值修改现有服务的启动类型(即自动,手动或禁用)。例如,如果当前启动类型为“已禁用”,则可能会将其保留,否则可能会将其设置为“自动”。如何从InstallShield获取服务的启动类型?
不幸的是我找不到获取服务启动类型的方法。有一些功能可以检测服务是否存在(ServiceExistsService
),并获取其当前的启动/停止状态(ServiceGetServiceState
),但没有任何内容检索服务的参数。我认为可能调用其中一个函数会将SERVICE_IS_PARAMS
结构填充为副作用,但似乎并非如此。
如何获取服务的启动类型?
答
这不是完全推荐,但实际上应该很容易从HKLM\System\CurrentControlSet\Services\TheServiceName
读取这些信息;尤其是DWORD Start
包含启动类型。请注意,直接在注册表中更改它不会影响事情,至少在重新启动后才会影响事情,所以使用API应用任何更改仍然很好。
或者,如果你想做的事情“正确”,你可以声明结构和功能,以达到Advapi32.QueryServiceConfig。这将支持更改注册表位置或底层存储的Windows的任何版本(我不希望的东西,但它应该被认为是可能的)。
答
另一种选择,这是速度较慢,但应该是防差错,是启动WMIC.EXE与参数“服务服务名获得STARTMODE”,并将输出重定向到一个文件中。然后,阅读文件和二号线应包含答案(自动/手动/禁用)
也许这手工检索的启动类型将是最好的解决办法自定义操作。 – 2011-03-22 07:38:39