windows NT 服务程序的创建,删除,启动,停止

来源:互联网 发布:淘宝店挣钱吗 编辑:程序博客网 时间:2024/06/06 00:54
  1. /* 
  2. 函数名: RtStatrtService 
  3. 描述:启动一个NT服务,服务名字由参数传入 
  4.    lpMachineName
      指向零终止字符串,命名为目标计算机。如果该指针为NULL ,或者如果它指向一个空字符串,函数连接到服务控制管理器在本地计算机上

         lpServiceName
           服务名称
  1. */  
  2. BOOL RtStatrtService(LPCTSTR lpMachineName,LPCTSTR lpServiceName)  
  3. {  
  4.     BOOL bResult = FALSE;  
  5.     SC_HANDLE hSCManager = OpenSCManager(lpMachineName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);  
  6.     if (hSCManager != NULL)  
  7.     {  
  8.         SC_HANDLE hService = OpenService(hSCManager, lpServiceName, SERVICE_ALL_ACCESS);  
  9.         if (hService != NULL)  
  10.         {  
  11.             if(StartService(hService, 0, 0))  
  12.             {  
  13.                bResult = TRUE;  
  14.             }  
  15.             else  
  16.             {  
  17.               bResult = FALSE;  
  18.               OutputDebugString(_T("start service failed!"));  
  19.             }  
  20.             CloseServiceHandle(hService);  
  21.         }  
  22.         CloseServiceHandle(hSCManager);  
  23.     }  
  24.     return bResult;  
  25. }  
  26. /* 
  27. 函数名: RtStopService 
  28. 描述:停止一个NT服务,服务名字由参数传入 
  29. */  
  30. BOOL RtStopService(LPCTSTR lpMachineName,LPCTSTR lpServiceName)  
  31. {  
  32.     BOOL bResult = FALSE;  
  33.     SC_HANDLE hSCManager = OpenSCManager(lpMachineName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);  
  34.     if (hSCManager != NULL)  
  35.     {  
  36.         SC_HANDLE hService = OpenService(hSCManager, lpServiceName, SERVICE_ALL_ACCESS);  
  37.         if (hService != NULL)  
  38.         {  
  39.             SERVICE_STATUS ServiceStatus;  
  40.             ZeroMemory(&ServiceStatus,sizeof(SERVICE_STATUS));  
  41.             ControlService(hService, SERVICE_CONTROL_STOP, &ServiceStatus);  
  42.             CloseServiceHandle(hService);  
  43.         }  
  44.         CloseServiceHandle(hSCManager);  
  45.     }  
  46.     return bResult;  
  47. }  
  48. /* 
  49. 函数名: RtCreateService 
  50. 描述:创建一个NT服务,服务名字由参数传入 
  51. */  
  52. BOOL RtCreateService(LPCTSTR lpServiceName,LPCTSTR lpDisplayName)  
  53. {  
  54.     SC_HANDLE schSCManager;  
  55.     SC_HANDLE schService;  
  56.     TCHAR szPath[MAX_PATH];  
  57.     if( !GetModuleFileName( NULL, szPath, MAX_PATH ) )  
  58.     {  
  59.         printf("Cannot install service (%d)/n", GetLastError());  
  60.         return FALSE;  
  61.     }  
  62.     schSCManager = OpenSCManager(   
  63.         NULL,                    // local computer  
  64.         NULL,                    // ServicesActive database   
  65.         SC_MANAGER_ALL_ACCESS);  // full access rights   
  66.     if (NULL == schSCManager)   
  67.     {  
  68.         printf("OpenSCManager failed (%d)/n", GetLastError());  
  69.         return FALSE;  
  70.     }  
  71.     // Create the service.  
  72.     schService = CreateService(   
  73.         schSCManager,              // SCM database   
  74.         lpServiceName,             // name of service   
  75.         lpDisplayName,             // service name to display   
  76.         SERVICE_ALL_ACCESS,        // desired access   
  77.         SERVICE_WIN32_OWN_PROCESS, // service type   
  78.         SERVICE_DEMAND_START,      // start type   
  79.         SERVICE_ERROR_NORMAL,      // error control type   
  80.         szPath,                    // path to service's binary   
  81.         NULL,                      // no load ordering group   
  82.         NULL,                      // no tag identifier   
  83.         NULL,                      // no dependencies   
  84.         NULL,                      // LocalSystem account   
  85.         NULL);                     // no password   
  86.     if (schService == NULL)   
  87.     {  
  88.         printf("CreateService failed (%d)/n", GetLastError());   
  89.         CloseServiceHandle(schSCManager);  
  90.         return FALSE;  
  91.     }  
  92.     else printf("Service installed successfully/n");   
  93.     CloseServiceHandle(schService);   
  94.     CloseServiceHandle(schSCManager);  
  95.       
  96.     return TRUE;  
  97. }  
  98.   
  99. /* 
  100. 函数名: RtDeleteService 
  101. 描述:删除一个NT服务,服务名字由参数传入 
  102. */  
  103. BOOL  RtDeleteService(LPCTSTR lpServiceName)  
  104. {  
  105.     SC_HANDLE schSCManager;  
  106.     SC_HANDLE schService;  
  107.     SERVICE_STATUS ssStatus;   
  108.     BOOL      bResult = FALSE;  
  109.     // Get a handle to the SCM database.   
  110.     schSCManager = OpenSCManager(   
  111.         NULL,                    // local computer  
  112.         NULL,                    // ServicesActive database   
  113.         SC_MANAGER_ALL_ACCESS);  // full access rights   
  114.     if (NULL == schSCManager)   
  115.     {  
  116.         printf("OpenSCManager failed (%d)/n", GetLastError());  
  117.         return bResult;  
  118.     }  
  119.     // Get a handle to the service.  
  120.     schService = OpenService(   
  121.         schSCManager,       // SCM database   
  122.         lpServiceName,      // name of service   
  123.         DELETE);            // need delete access   
  124.     if (schService == NULL)  
  125.     {   
  126.         printf("OpenService failed (%d)/n", GetLastError());   
  127.         CloseServiceHandle(schSCManager);  
  128.         return bResult;  
  129.     }  
  130.     // Delete the service.  
  131.     if (! DeleteService(schService) )   
  132.     {  
  133.         printf("DeleteService failed (%d)/n", GetLastError());   
  134.     }  
  135.     else  
  136.     {  
  137.         bResult = TRUE;  
  138.         printf("Service deleted successfully/n");   
  139.     }  
  140.     CloseServiceHandle(schService);   
  141.     CloseServiceHandle(schSCManager);  
  142.     return bResult;  
  143. }  
  144. /* 
  145. 函数名: RtStatrtService 
  146. 描述:启动一个NT服务,服务名字由参数传入 
  147. */  
  148. BOOL RtStatrtService(LPCTSTR lpMachineName,LPCTSTR lpServiceName)  
  149. {  
  150.     BOOL bResult = FALSE;  
  151.     SC_HANDLE hSCManager = OpenSCManager(lpMachineName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);  
  152.     if (hSCManager != NULL)  
  153.     {  
  154.         SC_HANDLE hService = OpenService(hSCManager, lpServiceName, SERVICE_ALL_ACCESS);  
  155.         if (hService != NULL)  
  156.         {  
  157.             if(StartService(hService, 0, 0))  
  158.             {  
  159.                bResult = TRUE;  
  160.             }  
  161.             else  
  162.             {  
  163.               bResult = FALSE;  
  164.               OutputDebugString(_T("start service failed!"));  
  165.             }  
  166.             CloseServiceHandle(hService);  
  167.         }  
  168.         CloseServiceHandle(hSCManager);  
  169.     }  
  170.     return bResult;  
  171. }  
  172. /* 
  173. 函数名: RtStopService 
  174. 描述:停止一个NT服务,服务名字由参数传入 
  175. */  
  176. BOOL RtStopService(LPCTSTR lpMachineName,LPCTSTR lpServiceName)  
  177. {  
  178.     BOOL bResult = FALSE;  
  179.     SC_HANDLE hSCManager = OpenSCManager(lpMachineName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);  
  180.     if (hSCManager != NULL)  
  181.     {  
  182.         SC_HANDLE hService = OpenService(hSCManager, lpServiceName, SERVICE_ALL_ACCESS);  
  183.         if (hService != NULL)  
  184.         {  
  185.             SERVICE_STATUS ServiceStatus;  
  186.             ZeroMemory(&ServiceStatus,sizeof(SERVICE_STATUS));  
  187.             ControlService(hService, SERVICE_CONTROL_STOP, &ServiceStatus);  
  188.             CloseServiceHandle(hService);  
  189.         }  
  190.         CloseServiceHandle(hSCManager);  
  191.     }  
  192.     return bResult;  
  193. }  
  194. /* 
  195. 函数名: RtQueryServiceStatus 
  196. 描述:查询服务的状态 
  197. */  
  198. void RtQueryServiceStatus(LPCTSTR lpMachineName,LPCTSTR lpServiceName)  
  199. {  
  200.       
  201.     SC_HANDLE hSCManager = OpenSCManager(lpMachineName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);  
  202.     if (hSCManager != NULL)  
  203.     {  
  204.    
  205.         SC_HANDLE hService = OpenService(hSCManager, lpServiceName, SERVICE_ALL_ACCESS);  
  206.         if (hService != NULL)  
  207.         {  
  208.             SERVICE_STATUS ServiceStatus;  
  209.             ZeroMemory(&ServiceStatus,sizeof(SERVICE_STATUS));  
  210.             if(QueryServiceStatus(hService, &ServiceStatus))  
  211.             {  
  212.                 switch (ServiceStatus.dwCurrentState)  
  213.                 {  
  214.                 case SERVICE_STOPPED:  
  215.                     OutputDebugString(_T("Stopped"));     
  216.                     break;  
  217.                 case SERVICE_START_PENDING:  
  218.                     OutputDebugString(_T("Start Pending"));   
  219.                     break;  
  220.                 case SERVICE_STOP_PENDING:  
  221.                     OutputDebugString(_T("Stop Pending"));    
  222.                     break;  
  223.                 case SERVICE_RUNNING:  
  224.                     OutputDebugString(_T("Running"));     
  225.                     break;  
  226.                 case SERVICE_CONTINUE_PENDING:  
  227.                     OutputDebugString(_T("Coninue Pending"));     
  228.                     break;  
  229.                 case SERVICE_PAUSE_PENDING:  
  230.                     OutputDebugString(_T("Pause Pending"));   
  231.                     break;  
  232.                 case SERVICE_PAUSED:  
  233.                     OutputDebugString(_T("Paused"));  
  234.                     break;  
  235.                 }  
  236.             }  
  237.             CloseServiceHandle(hService);  
  238.         }  
  239.            
  240.         CloseServiceHandle(hSCManager);  
  241.     }  
  242. }