我正在尝试创建一个运行可执行文件.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
);
答案 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的创作工具。如果该工具未公开此基础功能,则应将工具切换为具有此功能的工具。自定义操作不是标准操作的替代品。