我有一个窗口服务程序,我需要从它启动另一个可执行文件,但是没有这些函数在SvcMain中执行。我搜索了解决方案,但发现某处写了初始化应该在不到一秒钟内完成,否则它不会执行,所以我的createprocess
失败了
他们说要为此工作,你需要将SetServiceStatus
设置为service_start_pending
,但我找不到任何文件来说明它。我怎么能这样做?
答案 0 :(得分:0)
尝试从SvcMain运行辅助线程,让该线程完成启动外部可执行文件的工作。
答案 1 :(得分:0)
基本上,它听起来很简单。在致电CreateProcess
之前,请创建一个SERVICE_STATUS
对象,将SERVICE_STATUS.dwCurrentState
设置为SERVICE_START_PENDING
,然后致电SetServiceStatus(handle_to_your_service, &the_service_status);
。
将SERVICE_STATUS
对象设为全局对象可能最简单。您将不止一次致电SetServiceStatus
,并且大多数成员将随着时间的推移保持不变。例如。 .dwServiceType
根本不应发生变化,而.dwControlsAccepted
通常不会发生变化。