鱼C论坛

 找回密码
 立即注册
查看: 2407|回复: 2

[技术交流] Windows服务操作

[复制链接]
发表于 2018-3-14 16:31:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
学的第一门编程语言是易语言,可能大部分人没有听说过,国内的中文编程,我非常喜欢,但是遇到比较棘手(或者说深入or冷门)的问题时,去网上搜索一些资料吧,发现几乎都是C/C++的源代码,根本看不懂,所以又去学习C/C++,至今有将近两年了,在学校快要毕业了,却一天天的闲的发慌,就找个事做做,仿造开源的精易模块和MSDN的资料参考写了一套服务操作类,现在分享出来,与君共勉。

接下来准备学习一下Python了,不想再继续深入C/C++了,感觉在没毕业前,多学几门语言,会点基础,就业了在考虑深入哪一门吧,准备在接下来的时间在鱼C学习Python了。

下面贴代码

ServiceClass.h

  1. //ServiceClass.h

  2. #ifndef SERVICE_H_
  3. #define SERVICE_H_
  4. #define _CRT_SECURE_NO_WARNINGS
  5. #include <string>
  6. #include <Windows.h>

  7. class ServiceClass
  8. {
  9. public:
  10.         SC_HANDLE m_hSCManager,m_hService;
  11.         char m_serviceName[256];
  12.        
  13.         ServiceClass(char *serviceName=NULL);
  14.         ~ServiceClass(void);
  15.         int GetServiceStat(char *serviceName=NULL);
  16.         DWORD GetServiceType(char *serviceName=NULL);
  17.         char *GetServiceDescrible(char *desc,char *serviceName=NULL);
  18.         BOOL SetServiceDescrible(char *newDescrible,char *serviceName=NULL);
  19.         char *GetDisbleName(char *disbleName,char *serviceName=NULL);
  20.         char *GetServiceName(char *serviceName,char *disbleName);
  21.         BOOL InstallService(char *serviceName,char *disbleName,char *exe,char *serviceDescrble=NULL,BOOL bAllowDesktopInteraction=FALSE,int serviceType=16,int startType=3,char *interdePendent=NULL,char *loginUser=NULL,char *loginPass=NULL);
  22.         BOOL UnInstallService(char *serviceName=NULL);
  23.         BOOL StartServices(char *serviceName=NULL);
  24.         BOOL StopService(char *serviceName=NULL);
  25.         BOOL SuspendService(char *serviceName=NULL);
  26.         BOOL RecoveryService(char *serviceName=NULL);
  27.         BOOL Existence(char *serviceName);
  28.         BOOL SetStartType(int type,char *serviceName=NULL);
  29.         DWORD GetStartType(char *serviceName=NULL);
  30.         char *GetFileUrl(char *fileUrl,char *serviceName=NULL);
  31.         BOOL SetFileUrl(char *fileUrl,char *serviceName=NULL);
  32.         char *GetLoginType(char *loginType,char *serviceName=NULL);
  33.         int GetServiceNumber(int serviceStatus=3);
  34.         BOOL ReStartService(char *serviceName=NULL);
  35. };

  36. #endif
复制代码



ServiceClass.cpp

  1. // ServiceClass.cpp
  2. #include "stdafx.h"
  3. #include "ServiceClass.h"

  4. ServiceClass::ServiceClass(char *serviceName)
  5. {
  6.         if (serviceName)
  7.         {
  8.                 strcpy(ServiceClass::m_serviceName,serviceName);
  9.                 ServiceClass::m_hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
  10.                 if (!m_hSCManager)
  11.                 {
  12.                         printf("ServiceClass Init fail!\n");
  13.                 } else {
  14.                         ServiceClass::m_hService = OpenService(ServiceClass::m_hSCManager,ServiceClass::m_serviceName,SC_MANAGER_ALL_ACCESS );
  15.                         if (!ServiceClass::m_hSCManager)
  16.                         {
  17.                                 printf("ServiceClass::hService Init fail!\n");
  18.                         }
  19.                 }
  20.         } else {
  21.                 ServiceClass::m_hSCManager = NULL;
  22.                 ServiceClass::m_hService = NULL;
  23.                 memset(ServiceClass::m_serviceName,'\0',sizeof(ServiceClass::m_serviceName));
  24.         }
  25. }

  26. ServiceClass::~ServiceClass(void)
  27. {
  28.         CloseServiceHandle(ServiceClass::m_hService);
  29.         CloseServiceHandle(ServiceClass::m_hSCManager);
  30. }

  31. int ServiceClass::GetServiceStat(char *serviceName)
  32. {
  33.         SERVICE_STATUS serStatus;
  34.         int CurrentState;

  35.         if (serviceName)
  36.         {
  37.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,GENERIC_READ);
  38.                 SC_HANDLE hService = 0;

  39.                 if (!hSCManager)
  40.                 {
  41.                         return -1;
  42.                 }
  43.                 hService = OpenService(hSCManager,serviceName,GENERIC_READ);
  44.                 if (!hService)
  45.                 {
  46.                         CloseServiceHandle(hSCManager);
  47.                         return -2;
  48.                 }
  49.                 if (QueryServiceStatus(hService,&serStatus))
  50.                 {
  51.                         CurrentState = serStatus.dwCurrentState;
  52.                         CloseServiceHandle(hService);
  53.                         CloseServiceHandle(hSCManager);
  54.                 }
  55.         } else {
  56.                 if (QueryServiceStatus(m_hService,&serStatus))
  57.                 {
  58.                         CurrentState = serStatus.dwCurrentState;
  59.                 }
  60.         }
  61.         return CurrentState;
  62. }

  63. DWORD ServiceClass::GetServiceType(char *serviceName)
  64. {
  65.         DWORD dwLen;
  66.         BOOL bResult;
  67.         DWORD dwServiceType = 0;
  68.         LPQUERY_SERVICE_CONFIG lpServiceConfig;

  69.         if (serviceName)
  70.         {
  71.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,GENERIC_READ);
  72.                 SC_HANDLE hService = 0;

  73.                 if (!hSCManager)
  74.                 {
  75.                         return 0;
  76.                 }
  77.                 hService = OpenService(hSCManager,serviceName,GENERIC_READ);
  78.                 if (!hService)
  79.                 {
  80.                         CloseServiceHandle(hSCManager);
  81.                         return 0;
  82.                 }
  83.                 QueryServiceConfig(hService,NULL,NULL,&dwLen);
  84.                 lpServiceConfig = (LPQUERY_SERVICE_CONFIG)GlobalAlloc(64,dwLen);
  85.                 bResult = QueryServiceConfig(hService,lpServiceConfig,dwLen,&dwLen);
  86.                 CloseHandle(hService);
  87.                 CloseHandle(hSCManager);
  88.         } else {
  89.                 QueryServiceConfig(m_hService,NULL,NULL,&dwLen);
  90.                 lpServiceConfig = (LPQUERY_SERVICE_CONFIG)GlobalAlloc(64,dwLen);
  91.                 bResult = QueryServiceConfig(m_hService,lpServiceConfig,dwLen,&dwLen);
  92.         }
  93.         if (bResult)
  94.         {
  95.                 dwServiceType = lpServiceConfig->dwServiceType;
  96.         }
  97.         GlobalFree(lpServiceConfig);
  98.         return dwServiceType;
  99. }

  100. char *ServiceClass::GetServiceDescrible(char *desc,char *serviceName)
  101. {
  102.         DWORD dwLen = 0;
  103.         BYTE *hMem = NULL;
  104.         SERVICE_DESCRIPTION lpBuffer = {0};

  105.         if (serviceName)
  106.         {
  107.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,GENERIC_READ);
  108.                 SC_HANDLE hService = 0;

  109.                 if (!hSCManager)
  110.                 {
  111.                         return NULL;
  112.                 }
  113.                 hService = OpenService(hSCManager,serviceName,GENERIC_READ);
  114.                 if (!hService)
  115.                 {
  116.                         CloseServiceHandle(hSCManager);
  117.                         return NULL;
  118.                 }
  119.                 QueryServiceConfig2(hService,1,NULL,NULL,&dwLen);
  120.                 hMem = (BYTE *)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,dwLen);
  121.                 if (QueryServiceConfig2(hService,1,hMem,dwLen,&dwLen))
  122.                 {
  123.                         RtlMoveMemory(&lpBuffer,hMem,4);        // memmove
  124.                 }
  125.                 CloseServiceHandle(hService);
  126.                 CloseServiceHandle(hSCManager);
  127.         } else {
  128.                 QueryServiceConfig2(m_hService,1,NULL,NULL,&dwLen);
  129.                 hMem = (BYTE *)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,dwLen);
  130.                 if (QueryServiceConfig2(m_hService,1,hMem,dwLen,&dwLen))
  131.                 {
  132.                         RtlMoveMemory(&lpBuffer,hMem,4);        // memmove
  133.                 }
  134.         }
  135.         strcpy(desc,lpBuffer.lpDescription);
  136.         HeapFree(GetProcessHeap(),HEAP_ZERO_MEMORY,hMem);
  137.         return desc;
  138. }

  139. BOOL ServiceClass::SetServiceDescrible(char *newDescrible,char *serviceName)
  140. {
  141.         BOOL bOk = FALSE;
  142.         SERVICE_DESCRIPTION sd = {0};
  143.         LPSTR szDesc = newDescrible;

  144.         sd.lpDescription = szDesc;
  145.         if (serviceName)
  146.         {
  147.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,GENERIC_EXECUTE);
  148.                 SC_HANDLE hService = 0;

  149.                 if (!hSCManager)
  150.                 {
  151.                         return FALSE;
  152.                 }
  153.                 hService = OpenService(hSCManager,serviceName,GENERIC_EXECUTE);
  154.                 if (!hService)
  155.                 {
  156.                         CloseServiceHandle(hSCManager);
  157.                         return FALSE;
  158.                 }
  159.                 bOk = ChangeServiceConfig2A(hService,1,&sd);
  160.                 CloseServiceHandle(hService);
  161.                 CloseServiceHandle(hSCManager);
  162.         } else {
  163.                 bOk = ChangeServiceConfig2(m_hService,1,&sd);
  164.         }
  165.         return bOk;
  166. }

  167. char *ServiceClass::GetDisbleName(char *disbleName,char *serviceName)
  168. {
  169.         BOOL bResult;
  170.         DWORD dwLen;

  171.         if (serviceName)
  172.         {
  173.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,GENERIC_READ);

  174.                 if (!hSCManager)
  175.                 {
  176.                         return NULL;
  177.                 }
  178.                 GetServiceDisplayName(hSCManager,serviceName,NULL,&dwLen);
  179.                 bResult = GetServiceDisplayName(hSCManager,serviceName,disbleName,&dwLen);
  180.                 CloseServiceHandle(hSCManager);
  181.         } else {
  182.                 GetServiceDisplayName(m_hSCManager,serviceName,NULL,&dwLen);
  183.                 bResult = GetServiceDisplayName(m_hSCManager,m_serviceName,disbleName,&dwLen);
  184.         }
  185.         return (bResult?disbleName:NULL);
  186. }

  187. char *ServiceClass::GetServiceName(char *serviceName,char *disbleName)
  188. {
  189.         DWORD dwLen = 0;
  190.         BOOL bOk = FALSE;

  191.         GetServiceKeyName(ServiceClass::m_hSCManager,disbleName,NULL,&dwLen);
  192.         bOk = GetServiceKeyName(ServiceClass::m_hSCManager,disbleName,serviceName,&dwLen);
  193.         return (bOk?serviceName:NULL);
  194. }

  195. BOOL ServiceClass::InstallService(char *serviceName,char *disbleName,char *exe,char *serviceDescrble,BOOL bAllowDesktopInteraction,int serviceType,int startType,char *interdePendent,char *loginUser,char *loginPass)
  196. {
  197.         if (bAllowDesktopInteraction)
  198.         {
  199.                 serviceType = serviceType|SERVICE_INTERACTIVE_PROCESS;
  200.         }
  201.         ServiceClass::m_hService = CreateService(ServiceClass::m_hSCManager,serviceName,disbleName,SERVICE_ALL_ACCESS,serviceType,startType,SERVICE_ERROR_NORMAL,exe,NULL,NULL,interdePendent,loginUser,loginPass);
  202.         if (ServiceClass::m_hService)
  203.         {
  204.                 ServiceClass::SetServiceDescrible(serviceDescrble,serviceName);
  205.         }
  206.         return (ServiceClass::m_hService != 0);
  207. }

  208. BOOL ServiceClass::UnInstallService(char *serviceName)
  209. {
  210.         BOOL bOk;

  211.         if (serviceName)
  212.         {
  213.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
  214.                 SC_HANDLE hService = 0;

  215.                 if (!hSCManager)
  216.                 {
  217.                         return FALSE;
  218.                 }
  219.                 hService = OpenService(hSCManager,serviceName,SC_MANAGER_ALL_ACCESS);
  220.                 if (!hService)
  221.                 {
  222.                         CloseServiceHandle(hSCManager);
  223.                         return FALSE;
  224.                 }
  225.                 bOk = DeleteService(hService);
  226.                 CloseHandle(hService);
  227.         } else {
  228.                 bOk = DeleteService(ServiceClass::m_hService);
  229.                 CloseHandle(ServiceClass::m_hService);
  230.         }
  231.         return bOk;
  232. }

  233. BOOL ServiceClass::StartServices(char *serviceName)
  234. {
  235.         BOOL bOk;

  236.         if (serviceName)
  237.         {
  238.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SERVICE_START);
  239.                 SC_HANDLE hService = 0;

  240.                 if (!hSCManager)
  241.                 {
  242.                         return FALSE;
  243.                 }
  244.                 hService = OpenService(hSCManager,serviceName,SERVICE_START);
  245.                 if (!hService)
  246.                 {
  247.                         CloseServiceHandle(hSCManager);
  248.                         return FALSE;
  249.                 }
  250.                 bOk = StartService(hService,NULL,NULL);
  251.                 CloseServiceHandle(hService);
  252.                 CloseServiceHandle(hSCManager);
  253.         } else {
  254.                 bOk = StartService(ServiceClass::m_hService,NULL,NULL);
  255.         }
  256.         return bOk;
  257. }

  258. BOOL ServiceClass::StopService(char *serviceName)
  259. {
  260.         BOOL bOk;
  261.         SERVICE_STATUS status;

  262.         if (serviceName)
  263.         {
  264.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
  265.                 SC_HANDLE hService = 0;

  266.                 if (!hSCManager)
  267.                 {
  268.                         return FALSE;
  269.                 }
  270.                 hService = OpenService(hSCManager,serviceName,SC_MANAGER_ALL_ACCESS);
  271.                 if (!hService)
  272.                 {
  273.                         CloseServiceHandle(hSCManager);
  274.                         return FALSE;
  275.                 }
  276.                 bOk = ControlService(hService,1,&status);
  277.         } else {
  278.                 bOk = ControlService(ServiceClass::m_hService,1,&status);
  279.         }
  280.         return bOk;
  281. }

  282. BOOL ServiceClass::SuspendService(char *serviceName)
  283. {
  284.         BOOL bOk;
  285.         SERVICE_STATUS status;

  286.         if (serviceName)
  287.         {
  288.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
  289.                 SC_HANDLE hService = 0;

  290.                 if (!hSCManager)
  291.                 {
  292.                         return FALSE;
  293.                 }
  294.                 hService = OpenService(hSCManager,serviceName,SC_MANAGER_ALL_ACCESS);
  295.                 if (!hService)
  296.                 {
  297.                         CloseServiceHandle(hSCManager);
  298.                         return FALSE;
  299.                 }
  300.                 bOk = ControlService(hService,2,&status);
  301.                 CloseServiceHandle(hService);
  302.                 CloseServiceHandle(hSCManager);
  303.         } else {
  304.                 bOk = ControlService(ServiceClass::m_hService,2,&status);
  305.         }
  306.         return bOk;
  307. }

  308. BOOL ServiceClass::RecoveryService(char *serviceName)
  309. {
  310.         BOOL bOk;
  311.         SERVICE_STATUS status;

  312.         if (serviceName)
  313.         {
  314.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
  315.                 SC_HANDLE hService = 0;

  316.                 if (!hSCManager)
  317.                 {
  318.                         return FALSE;
  319.                 }
  320.                 hService = OpenService(hSCManager,serviceName,SC_MANAGER_ALL_ACCESS);
  321.                 if (!hService)
  322.                 {
  323.                         CloseServiceHandle(hSCManager);
  324.                         return FALSE;
  325.                 }
  326.                 bOk = ControlService(hService,SERVICE_CONTROL_CONTINUE,&status);
  327.                 CloseServiceHandle(hService);
  328.                 CloseServiceHandle(hSCManager);
  329.         } else {
  330.                 bOk = ControlService(ServiceClass::m_hService,SERVICE_CONTROL_CONTINUE,&status);
  331.         }
  332.         return bOk;
  333. }

  334. BOOL ServiceClass::Existence(char *serviceName)
  335. {
  336.         SC_HANDLE hSCManager,hService;

  337.         hSCManager = OpenSCManager(NULL,NULL,GENERIC_READ);
  338.         if (!hSCManager)
  339.         {
  340.                 hService = OpenService(hSCManager,serviceName,GENERIC_READ);
  341.                 CloseServiceHandle(hService);
  342.                 CloseServiceHandle(hSCManager);
  343.         }
  344.         return (hService!=0);
  345. }

  346. BOOL ServiceClass::SetStartType(int type,char *serviceName)
  347. {
  348.         BOOL bOk;

  349.         if (serviceName)
  350.         {
  351.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
  352.                 SC_HANDLE hService = 0;

  353.                 if (!hSCManager)
  354.                 {
  355.                         return FALSE;
  356.                 }
  357.                 hService = OpenService(hSCManager,serviceName,SC_MANAGER_ALL_ACCESS);
  358.                 if (!hService)
  359.                 {
  360.                         CloseServiceHandle(hSCManager);
  361.                         return FALSE;
  362.                 }
  363.                 bOk = ChangeServiceConfig(hService,4294967295,type,4294967295,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
  364.                 CloseServiceHandle(hService);
  365.                 CloseServiceHandle(hSCManager);
  366.         } else {
  367.                 bOk = ChangeServiceConfig(ServiceClass::m_hService,4294967295,type,4294967295,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
  368.         }
  369.         return bOk;
  370. }

  371. DWORD ServiceClass::GetStartType(char *serviceName)
  372. {
  373.         LPQUERY_SERVICE_CONFIG lpsc = NULL;
  374.         DWORD dwLen,type;
  375.         BOOL bOk;

  376.         if (serviceName)
  377.         {
  378.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,GENERIC_READ);
  379.                 SC_HANDLE hService = 0;

  380.                 if (!hSCManager)
  381.                 {
  382.                         return -1;
  383.                 }
  384.                 hService = OpenService(hSCManager,serviceName,GENERIC_READ);
  385.                 if (!hService)
  386.                 {
  387.                         CloseServiceHandle(hSCManager);
  388.                         return -1;
  389.                 }
  390.                 QueryServiceConfig(hService,NULL,NULL,&dwLen);
  391.                 lpsc = (LPQUERY_SERVICE_CONFIG)GlobalAlloc(64,dwLen);
  392.                 bOk = QueryServiceConfig(hService,lpsc,dwLen,&dwLen);
  393.                 CloseServiceHandle(hService);
  394.                 CloseServiceHandle(hSCManager);
  395.         } else {
  396.                 QueryServiceConfig(ServiceClass::m_hService,NULL,NULL,&dwLen);
  397.                 lpsc = (LPQUERY_SERVICE_CONFIG)GlobalAlloc(64,dwLen);
  398.                 bOk = QueryServiceConfig(ServiceClass::m_hService,lpsc,dwLen,&dwLen);
  399.         }
  400.         if (bOk)
  401.         {
  402.                 if (lpsc->dwStartType == 2 && lpsc->dwServiceType == 32)
  403.                 {
  404.                         type = 1;        // 自动
  405.                 } else if (lpsc->dwStartType == 2 && lpsc->dwServiceType == 16)
  406.                 {
  407.                         type = 2;        // 自动(延迟启动)
  408.                 } else if (lpsc->dwStartType == 3)
  409.                 {
  410.                         type =3;        // 手动
  411.                 } else if (lpsc->dwStartType == 4)
  412.                 {
  413.                         type = 4;        // 禁用
  414.                 }
  415.         }
  416.         GlobalFree(lpsc);
  417.         return type;
  418. }

  419. char *ServiceClass::GetFileUrl(char *fileUrl,char *serviceName)
  420. {
  421.         BOOL bOk;
  422.         DWORD dwByteneeded;
  423.         LPQUERY_SERVICE_CONFIG lpsc = {0};

  424.         if (serviceName)
  425.         {
  426.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
  427.                 SC_HANDLE hService = 0;

  428.                 if (!hSCManager)
  429.                 {
  430.                         return FALSE;
  431.                 }
  432.                 hService = OpenService(hSCManager,serviceName,SC_MANAGER_ALL_ACCESS);
  433.                 if (!hService)
  434.                 {
  435.                         CloseServiceHandle(hSCManager);
  436.                         return FALSE;
  437.                 }
  438.                 QueryServiceConfig(hService,NULL,NULL,&dwByteneeded);
  439.                 lpsc = (LPQUERY_SERVICE_CONFIG)GlobalAlloc(64,dwByteneeded);
  440.                 bOk = QueryServiceConfig(hService,lpsc,dwByteneeded,&dwByteneeded);
  441.                 CloseServiceHandle(hService);
  442.                 CloseServiceHandle(hSCManager);
  443.         } else {
  444.                 QueryServiceConfig(ServiceClass::m_hService,NULL,NULL,&dwByteneeded);
  445.                 lpsc = (LPQUERY_SERVICE_CONFIG)GlobalAlloc(64,dwByteneeded);
  446.                 bOk = QueryServiceConfig(ServiceClass::m_hService,lpsc,dwByteneeded,&dwByteneeded);
  447.         }
  448.         _strset(fileUrl,0);
  449.         strcpy(fileUrl,lpsc->lpBinaryPathName);
  450.         GlobalFree(lpsc);
  451.         return fileUrl;
  452. }

  453. BOOL ServiceClass::SetFileUrl(char *fileUrl,char *serviceName)
  454. {
  455.         BOOL bOk;

  456.         if (serviceName)
  457.         {
  458.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
  459.                 SC_HANDLE hService = 0;

  460.                 if (!hSCManager)
  461.                 {
  462.                         return FALSE;
  463.                 }
  464.                 hService = OpenService(hSCManager,serviceName,SC_MANAGER_ALL_ACCESS);
  465.                 if (!hService)
  466.                 {
  467.                         CloseServiceHandle(hSCManager);
  468.                         return FALSE;
  469.                 }
  470.                 bOk = ChangeServiceConfig(hService,4294967295,4294967295,4294967295,fileUrl,NULL,NULL,NULL,NULL,NULL,NULL);
  471.                 CloseServiceHandle(hService);
  472.                 CloseServiceHandle(hSCManager);
  473.         } else {
  474.                 bOk = ChangeServiceConfig(ServiceClass::m_hService,4294967295,4294967295,4294967295,fileUrl,NULL,NULL,NULL,NULL,NULL,NULL);
  475.         }
  476.         return bOk;
  477. }

  478. char *ServiceClass::GetLoginType(char *loginType,char *serviceName)
  479. {
  480.         char ss[100] = "";
  481.         char *index = NULL;
  482.         BOOL bOk = FALSE;
  483.         DWORD dwByteneeded=0;
  484.        
  485.         LPQUERY_SERVICE_CONFIG lpsc = NULL;
  486.        

  487.         if (serviceName)
  488.         {
  489.                 SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,GENERIC_READ);
  490.                 SC_HANDLE hService = 0;

  491.                 if (!hSCManager)
  492.                 {
  493.                         return NULL;
  494.                 }
  495.                 hService = OpenService(hSCManager,serviceName,GENERIC_READ);
  496.                 if (!hService)
  497.                 {
  498.                         CloseServiceHandle(hSCManager);
  499.                         return NULL;
  500.                 }
  501.                 QueryServiceConfig(hService,NULL,NULL,&dwByteneeded);
  502.                 lpsc = (LPQUERY_SERVICE_CONFIG)GlobalAlloc(64,dwByteneeded);
  503.                 bOk = QueryServiceConfig(hService,lpsc,dwByteneeded,&dwByteneeded);
  504.                 CloseServiceHandle(hService);
  505.                 CloseServiceHandle(hSCManager);
  506.         } else {
  507.                 QueryServiceConfig(ServiceClass::m_hService,NULL,NULL,&dwByteneeded);
  508.                 lpsc = (LPQUERY_SERVICE_CONFIG)GlobalAlloc(64,dwByteneeded);
  509.                 bOk = QueryServiceConfig(ServiceClass::m_hService,lpsc,dwByteneeded,&dwByteneeded);
  510.         }
  511.         if (bOk)
  512.         {
  513.                 strcpy(ss,_strupr(lpsc->lpServiceStartName));
  514.                 GlobalFree(lpsc);
  515.                 _strset(loginType,0);
  516.                 if (!strstr(ss,"localservice"))
  517.                 {
  518.                         strcpy(loginType,"本地服务");
  519.                 } else if (!strstr(ss,"Networkservice"))
  520.                 {
  521.                         strcpy(loginType,"网络服务");
  522.                 } else if (!strstr(ss,"localsystem"))
  523.                 {
  524.                         strcpy(loginType,"本地系统");
  525.                 }
  526.         }
  527.         return loginType;
  528. }

  529. int ServiceClass::GetServiceNumber(int serviceStatus)
  530. {
  531.         LPENUM_SERVICE_STATUS lpsc = NULL;
  532.         DWORD dwBytesNeeded = 0,dwReturned = 0,dwHandle = 0;
  533.         BOOL bOk = FALSE;

  534.         EnumServicesStatus(ServiceClass::m_hSCManager,48,serviceStatus,NULL,NULL,&dwBytesNeeded,&dwReturned,&dwHandle);
  535.         lpsc = (LPENUM_SERVICE_STATUS)GlobalAlloc(64,dwBytesNeeded);
  536.         EnumServicesStatus(ServiceClass::m_hSCManager,48,serviceStatus,lpsc,dwBytesNeeded,&dwBytesNeeded,&dwReturned,&dwHandle);
  537.         GlobalFree(lpsc);
  538.         return dwReturned;
  539. }

  540. BOOL ServiceClass::ReStartService(char *serviceName)
  541. {
  542.         if (serviceName)
  543.         {
  544.                 if (ServiceClass::StopService(serviceName))
  545.                         return ServiceClass::StartServices(serviceName);
  546.         } else {
  547.                 if (ServiceClass::StopService(ServiceClass::m_serviceName))
  548.                         return ServiceClass::StartServices(ServiceClass::m_serviceName);
  549.         }
  550.         return FALSE;
  551. }
复制代码



VS的预编译文件也贴出来吧  stdafx.h

  1. // stdafx.h : 标准系统包含文件的包含文件,
  2. // 或是经常使用但不常更改的
  3. // 特定于项目的包含文件
  4. //

  5. #pragma once

  6. #include "targetver.h"

  7. #define WIN32_LEAN_AND_MEAN             //  从 Windows 头文件中排除极少使用的信息



  8. // TODO: 在此处引用程序需要的其他头文件
复制代码


VS的预编译文件也贴出来吧  stdafx.cpp

  1. // stdafx.cpp : 只包括标准包含文件的源文件
  2. // ServiceClass.pch 将作为预编译头
  3. // stdafx.obj 将包含预编译类型信息

  4. #include "stdafx.h"

  5. // TODO: 在 STDAFX.H 中
  6. // 引用任何所需的附加头文件,而不是在此文件中引用
复制代码



有什么地方看不懂,回复这个帖子,看到就做出解答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-14 16:56:57 | 显示全部楼层
这是神马?代码太长啦看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-14 17:12:09 | 显示全部楼层
alltolove 发表于 2018-3-14 16:56
这是神马?代码太长啦看不懂

Windows服务操作的C++代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 22:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表