【问题标题】:How can I get the startup type of a service from InstallShield?如何从 InstallShield 获取服务的启动类型?
【发布时间】:2011-03-21 17:56:58
【问题描述】:

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

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

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

【问题讨论】:

  • 也许手动检索启动类型的自定义操作是最好的解决方案。

标签: windows service installshield installscript


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多