2011-12-11 34 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);