博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 检查Windows服务运行状态
阅读量:5234 次
发布时间:2019-06-14

本文共 2325 字,大约阅读时间需要 7 分钟。

检查Windows服务运行状态

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
#include
 <iostream>
#include
 <tchar.h>
#include
 <Windows.h>
using
 
namespace
 std;
/*  检查Windows服务状态信息
    使用API:
    OpenSCManager
    OpenService
    QueryServiceStatusEx
*/
int
 main(
void
)
{
    TCHAR szSvcName[]       = _T(
"HistorySvr"
);
    SC_HANDLE schSCManager  = 
NULL
;
    SC_HANDLE schService    = 
NULL
;
    SERVICE_STATUS_PROCESS ssStatus;
    DWORD dwOldCheckPoint   = 
0
;
    DWORD dwStartTickCount  = 
0
;
    DWORD dwWaitTime        = 
0
;
    DWORD dwBytesNeeded     = 
0
;
    
// Get a handle to the SCM database.
    schSCManager = OpenSCManager(
                       
NULL
,                                
// local computer
                       
NULL
,                                
// ServicesActive database
                       SC_MANAGER_ALL_ACCESS);              
// full access rights
    
if
 (
NULL
 == schSCManager)
    {
        printf(
"OpenSCManager failed (%d)\n"
, GetLastError());
    }
    
// Get a handle to the service.
    schService = OpenService(
                     schSCManager,                      
// SCM database
                     szSvcName,                         
// name of service
                     SERVICE_QUERY_STATUS |
                     SERVICE_ENUMERATE_DEPENDENTS);     
// full access
    
if
 (schService == 
NULL
)
    {
        printf(
"OpenService failed (%d)\n"
, GetLastError());
        CloseServiceHandle(schSCManager);
    }
    
// Check the status in case the service is not stopped.
    
if
 (!QueryServiceStatusEx(
                schService,                         
// handle to service
                SC_STATUS_PROCESS_INFO,             
// information level
                (LPBYTE) &ssStatus,                 
// address of structure
                
sizeof
(SERVICE_STATUS_PROCESS),     
// size of structure
                &dwBytesNeeded ) )                  
// size needed if buffer is too small
    {
        printf(
"QueryServiceStatusEx failed (%d)\n"
, GetLastError());
        CloseServiceHandle(schService);
        CloseServiceHandle(schSCManager);
    }
    
else
    {
        
// Check if the service is already running. It would be possible
        
// to stop the service here, but for simplicity this example just returns.
        printf(
"Service status: "
);
        
switch
(ssStatus.dwCurrentState)
        {
        
case
 SERVICE_STOPPED:
        
case
 SERVICE_STOP_PENDING:
            printf(
"Stop"
);
            
break
;
        
case
 SERVICE_PAUSED:
        
case
 SERVICE_PAUSE_PENDING:
            printf(
"Pause"
);
            
break
;
        
case
 SERVICE_CONTINUE_PENDING:
        
case
 SERVICE_RUNNING:
        
case
 SERVICE_START_PENDING:
            printf(
"Running"
);
            
break
;
        }
        cout << endl;
    }
    cin.get();
    
return
 
0
;
}

  PS:请以管理员权限运行该程序,VS配置如下:

   

  参考:

转载于:https://www.cnblogs.com/MakeView660/p/8358419.html

你可能感兴趣的文章
团队作业第二次—项目选题报告
查看>>
解决 Linux 下 zip 乱码
查看>>
软件工程第二次作业--结队编程
查看>>
iOS UICollectionView 入门 07 点击cell放大图片
查看>>
Android SystemUI源代码分析和修改
查看>>
tomcat 1.支持jsp和servlets的Web服务器 2.还是一个Servlet和JSP容器
查看>>
js比较函数
查看>>
微信小程序wx.showLoading
查看>>
小学生作文妙语(超级超级搞笑版!!!!!!!!!)
查看>>
数据仓库基础(四)ODS、元数据
查看>>
template-string
查看>>
团队任务个人博客--20160426
查看>>
MyBatis对不同数据库的主键生成策略
查看>>
velocity语法
查看>>
Android之SqlLite数据库使用
查看>>
多物体中添加透明度的显示
查看>>
zookeeper(1)——zookeeper服务器集群搭建配置
查看>>
XAF 如何实现ListView单元格批量更改?
查看>>
MySQL备份
查看>>
如何让你的iPhone程序支持多语言环境(本地化)
查看>>