服务中启动一个exe程序,关机再开机,服务自启动成功了,但是不能自动启动exe程序

时间:2021-10-28 19:33:36
Windows 10 OS上写一个服务程序,再通过服务程序以进程的方式启动一个exe程序,后台运行,获取PC的接口数据。
流程大概就是,服务中启动一个exe程序,关机再开机,服务自启动是成功了,但是不能自启动写在服务中ServiceMain内的exe程序。手动启动服务,可以成功启动exe程序。

查了很多资料有以下说法:
1.因为exe程序是以一个进程的方式启动,关机后,进程就杀死了,再开机也不会自动重启,可是我的exe程序是放在ServiceMain中的,服务程序都自启动成功了,为什么在它里面运行的exe无法成功?
2.LOG每次到ServiceMain就断了,但每次手动去启动都能成功。

有以前遇到过类似情况的吗?会是什么原因呢?

3 个解决方案

#1


ServiceMain代码如下,帮忙看下在关机再开机情况下这种写法是否有问题,手动去启动服务,这个外部exe是可以启动成功的:
void ServiceMain(int argc, char** argv)
{
int error;
WriteToLog("Service Main");
ServiceStatus.dwServiceType =SERVICE_WIN32; //SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS;//SERVICE_WIN32;
ServiceStatus.dwCurrentState =SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted =SERVICE_ACCEPT_STOP |SERVICE_ACCEPT_SHUTDOWN ;//|SERVICE_ACCEPT_PAUSE_CONTINUE;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;

hStatus = RegisterServiceCtrlHandler(ServiceName,(LPHANDLER_FUNCTION)ControlHandler);
if (hStatus == (SERVICE_STATUS_HANDLE)0)
{
return;
}
#if 0
error = InitService();
if (!error)
{
WriteToLog("InitService");
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
#endif
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(hStatus, &ServiceStatus);
  
       installHelper.RunService(); // 这里启动我的exe
   
while (ServiceStatus.dwCurrentState == SERVICE_RUNNING)
{
        //installHelper.RunService();
Sleep(SLEEP_TIME);
}
return;
}

#2


有没有可能exe程序写的有问题,导致无法启动?可是手动启动时,它正常启动且获取数据这些都一切正常。无法解释了,万能的log失灵了,坎坷。有没有正好遇到过这种情况的进来解答一下啊,给个思路也行啊。freshbird 困惑等待中......

#3


顶。。。。。。

#1


ServiceMain代码如下,帮忙看下在关机再开机情况下这种写法是否有问题,手动去启动服务,这个外部exe是可以启动成功的:
void ServiceMain(int argc, char** argv)
{
int error;
WriteToLog("Service Main");
ServiceStatus.dwServiceType =SERVICE_WIN32; //SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS;//SERVICE_WIN32;
ServiceStatus.dwCurrentState =SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted =SERVICE_ACCEPT_STOP |SERVICE_ACCEPT_SHUTDOWN ;//|SERVICE_ACCEPT_PAUSE_CONTINUE;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;

hStatus = RegisterServiceCtrlHandler(ServiceName,(LPHANDLER_FUNCTION)ControlHandler);
if (hStatus == (SERVICE_STATUS_HANDLE)0)
{
return;
}
#if 0
error = InitService();
if (!error)
{
WriteToLog("InitService");
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
#endif
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(hStatus, &ServiceStatus);
  
       installHelper.RunService(); // 这里启动我的exe
   
while (ServiceStatus.dwCurrentState == SERVICE_RUNNING)
{
        //installHelper.RunService();
Sleep(SLEEP_TIME);
}
return;
}

#2


有没有可能exe程序写的有问题,导致无法启动?可是手动启动时,它正常启动且获取数据这些都一切正常。无法解释了,万能的log失灵了,坎坷。有没有正好遇到过这种情况的进来解答一下啊,给个思路也行啊。freshbird 困惑等待中......

#3


顶。。。。。。