windows服务启动一个外部exe的进程,为什么while循环之执行一次呢?

jiajia_loved 2017-07-14 04:55:44
void ServiceMain(int argc, char** argv) 
{
int error;
ServiceStatus.dwServiceType = SERVICE_WIN32;
ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
hStatus = RegisterServiceCtrlHandler(L"MyServer", (LPHANDLER_FUNCTION)ControlHandler);
if (hStatus == (SERVICE_STATUS_HANDLE)0)
{
return;
}
error = InitService();
if (!error)
{
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus (hStatus, &ServiceStatus);
MEMORYSTATUS memory;
[code=c]
while (ServiceStatus.dwCurrentState == SERVICE_RUNNING)
{
STARTUPINFO si;
memset(&si,0,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESHOWWINDOW;
si.wShowWindow=SW_SHOW;
PROCESS_INFORMATION pi;
if(!CreateProcess(TEXT("c:\\windows\\system32\\notepad.exe"),//测试先打开记事本,之后测试m_Server->Start();
NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
}
else
{
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
Sleep(1000);
}
return;
}[/code]

只有第一次启动服务的时候进程里会启动 notepad.exe
后面我手动从任务管理器里关掉 notepad.exe的进程,它再也不会重新创建进程了。但是我的服务显示的一直是运行状态的呀。

我的做了一个服务器,想开机启动服务器,并且如果服务器中途死掉,利用服务重新启动我的服务器(m_Server->Start();)服务器没有界面。

请问那个while (ServiceStatus.dwCurrentState == SERVICE_RUNNING)为什么只执行一次呢?
...全文
1193 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
战在春秋 2017-07-16
  • 打赏
  • 举报
回复
查看有没有依附事件没有启动。 用事件查看器分析日志记录。
jiajia_loved 2017-07-15
  • 打赏
  • 举报
回复
这个在win7和win10上都能启动的服务,到xp系统上怎么会启动都启动不了呢,提示 “在本地计算机无法启动服务,错误1053”
jiajia_loved 2017-07-14
  • 打赏
  • 举报
回复
void ServiceMain(int argc, char** argv) 
{ 
    int error; 
    ServiceStatus.dwServiceType = SERVICE_WIN32; 
    ServiceStatus.dwCurrentState = SERVICE_START_PENDING; 
    ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
    ServiceStatus.dwWin32ExitCode = 0; 
    ServiceStatus.dwServiceSpecificExitCode = 0; 
    ServiceStatus.dwCheckPoint = 0; 
    ServiceStatus.dwWaitHint = 0; 
    hStatus = RegisterServiceCtrlHandler(L"MyServer", (LPHANDLER_FUNCTION)ControlHandler); 
    if (hStatus == (SERVICE_STATUS_HANDLE)0) 
    { 
        return; 
    } 
    error = InitService(); 
    if (!error) 
    {
        ServiceStatus.dwCurrentState = SERVICE_STOPPED; 
        ServiceStatus.dwWin32ExitCode = -1; 
        SetServiceStatus(hStatus, &ServiceStatus); 
        return; 
    } 
    ServiceStatus.dwCurrentState = SERVICE_RUNNING; 
    SetServiceStatus (hStatus, &ServiceStatus);
    MEMORYSTATUS memory;
while (ServiceStatus.dwCurrentState == SERVICE_RUNNING)
 {
   STARTUPINFO si;
   memset(&si,0,sizeof(STARTUPINFO));
   si.cb=sizeof(STARTUPINFO);
   si.dwFlags=STARTF_USESHOWWINDOW;
   si.wShowWindow=SW_SHOW;
   PROCESS_INFORMATION pi;
   if(!CreateProcess(TEXT("c:\\windows\\system32\\notepad.exe"),//测试先打开记事本,之后测试m_Server->Start();
   NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
   {
    }
   else
   {
   }
 CloseHandle(pi.hThread);
 CloseHandle(pi.hProcess);
   Sleep(1000);
 }
 return; 
 }

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧