2011-12-11 26 views
3

如何从C/C++程序更改Windows服务的当前状态?在c/C++中更改Windows服务的状态

例如说,Mysql作为服务运行,其当前状态为'Started'...我如何检查状态以及如何从c/C++程序更改其状态?就像我想将其状态从'Started'更改为'Stopped'一样 - 我如何在c/C++中执行此操作?

+1

它比C++的一个WinAPI的问题... –

回答

2

一小段代码,您开始:

/* Open service control manager. */ 
SC_HANDLE scm_handle = OpenSCManager(0, 
            0, 
            SC_MANAGER_ALL_ACCESS); 
/* Ensure (0 != scm_handle) */ 

/* Open service. */ 
SC_HANDLE service_handle = OpenService(scm_handle, 
             "mysql-service-name", 
             SERVICE_ALL_ACCESS); 
/* Ensure (0 != service_handle) */ 

/* Try to stop the service if it is running. */ 
SERVICE_STATUS status; /* This may need populated differently for mysql. */ 
status.dwServiceType = SERVICE_WIN32_OWN_PROCESS; 
if (ControlService(service_handle, SERVICE_CONTROL_STOP, &status)) 
{ 
    Sleep(1000); 

    while (QueryServiceStatus(service_handle, &status)) 
    { 
     if(status.dwCurrentState == SERVICE_STOP_PENDING) 
     { 
      Sleep(1000); 
     } 
     else 
     { 
      break; 
     } 
    } 

    if (status.dwCurrentState == SERVICE_STOPPED) 
    { 
     /* Success: service stopped. */ 
    } 
    else 
    { 
     /* Failure: service not stopped. */ 
    } 
} 
else 
{ 
    /* Failed to issue stop request. */ 
} 

CloseServiceHandle(service_handle); 
CloseServiceHandle(scm_handle);