C ++中服务的自动延迟启动

时间:2013-05-09 08:29:58

标签: c++ visual-c++ service windows-installer

我正在尝试创建一个运行可执行文件.exe的服务。问题是每次重启时服务都没有启动.exe。它缺乏一致性。但是当我手动将启动类型设置为自动(延迟启动)时,它可以完美地工作。如何通过C ++将此启动类型设置为自动(延迟启动)?

这是我用来自动启动的代码:

我应该如何将“Service_auto_start”更改为自动(延迟启动)?

SC_HANDLE schService = CreateService
(
    schSCManager,                   /* SCManager database      */
    pName,                          /* Name of service         */
    pName,                          /* Service name to display */
    SERVICE_ALL_ACCESS,             /* Desired access          */
    SERVICE_WIN32_OWN_PROCESS|
      SERVICE_INTERACTIVE_PROCESS , /* Service type            */
    SERVICE_AUTO_START,             /* Start type              */
    SERVICE_ERROR_NORMAL,           /* Error control type      */
    pPath,                          /* Service's binary        */
    NULL,                           /* No load ordering group  */
    NULL,                           /* No tag identifier       */
    NULL,                           /* No dependencies         */
    NULL,                           /* LocalSystem account     */
    NULL
);

2 个答案:

答案 0 :(得分:3)

ChangeServiceConfig2函数可以执行此操作。

BOOL WINAPI ChangeServiceConfig2(
  __in          SC_HANDLE hService,
  __in          DWORD dwInfoLevel,
  __in          LPVOID lpInfo
);

dwInfoLevel设置为SERVICE_CONFIG_DELAYED_AUTO_START_INFO,将启动类型修改为延迟自动启动。

请注意,Windows Server 2003和Windows XP不支持此值。 此外,这只是潜水描述而不是延迟服务启动

答案 1 :(得分:0)

您应该使用Windows Installer 5.0及更高版本中提供的MsiServiceConfig Table

这意味着该功能仅适用于Windows 7/8和Server 2008R2 / 2012。这适合你的故事吗?如果是这样,请继续阅读。否则,替代方法可能是在MSI中创建一个注册表值(DelayedAutoStart DWORD = 1)。

您没有提到用于制作MSI的创作工具。如果该工具未公开此基础功能,则应将工具切换为具有此功能的工具。自定义操作不是标准操作的替代品。