教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

我调试了一个完整的VC检测服务、启动服务、停止服务的程

来源:网络收集 时间:2026-08-09
导读: 我调试了一个完整的VC检测服务、启动服务、停止服务的程序,结构不复杂,就三个函数。该例子是以系统自带的打印缓存服务(Print Spooler)为例演示的。 另外我写了个详细的开发教程,你自己熟悉一下。 // 注意,此程序适应的服务名称 仅为单字符串。 Spooler

我调试了一个完整的VC检测服务、启动服务、停止服务的程序,结构不复杂,就三个函数。该例子是以系统自带的打印缓存服务(Print Spooler)为例演示的。 另外我写了个详细的开发教程,你自己熟悉一下。

// 注意,此程序适应的服务名称 仅为单字符串。 Spooler (√)Net Logon (×)

VC开发服务管理程序简单教程

一、新建VC对话框程序(此例子为SrvCheck),设计界面如下:

二、在SrvCheckDlg.cpp中加入服务相关的头文件:winsvc.h,如下图:

#include

三、在SrvCheckDlg.cpp文件末尾加入以下函数定义:

int ServiceIsRunning(LPCTSTR ServiceName) //检测是否运行 {

SC_HANDLE schService; // ?## 句柄 SC_HANDLE schSCManager;

DWORD RC; //double word 双字节

SERVICE_STATUS ssStatus; UINT return_value;

schSCManager = OpenSCManager(

NULL, // machine (NULL == local) NULL, // database (NULL == default) SC_MANAGER_ALL_ACCESS // access required );

// OpenSCManager函数建立了一个连接到服务控制管理器,并打开指定的数据库 if (!schSCManager) return -1;

schService = OpenService(schSCManager, ServiceName, SERVICE_ALL_ACCESS); if (!schService) {

RC = GetLastError();

CloseServiceHandle(schSCManager);

if (RC == ERROR_SERVICE_DOES_NOT_EXIST) return -2; else return -1; }

QueryServiceStatus(schService, &ssStatus);

if(ssStatus.dwCurrentState == SERVICE_RUNNING) return_value = 1; else return_value = 0; CloseServiceHandle(schService); CloseServiceHandle(schSCManager); return return_value; }

int ServiceStart( LPCTSTR ServiceName) //启动 LPCTSTR 是一种类型 L:long P:指针 // C: 容量 T:win32环境 STR:变量是一个字符串 {

SC_HANDLE schService; SC_HANDLE schSCManager; DWORD RC;

UINT return_value;

schSCManager = OpenSCManager(

NULL, // machine (NULL == local) NULL, // database (NULL == default) SC_MANAGER_ALL_ACCESS // access required ); if (!schSCManager) return -1;

schService = OpenService(schSCManager, ServiceName, SERVICE_ALL_ACCESS); if (!schService) {

RC = GetLastError();

CloseServiceHandle(schSCManager);

if (RC == ERROR_SERVICE_DOES_NOT_EXIST) return -2; else return -1; }

return_value = StartService(schService, 0, NULL) ? 1 : -1; RC = GetLastError();

CloseServiceHandle(schService); CloseServiceHandle(schSCManager); return return_value; }

int ServiceStop(LPCTSTR ServiceName,ULONG TimeoutSeconds) //停止 {

SC_HANDLE schService; SC_HANDLE schSCManager; DWORD RC;

UINT return_value; SERVICE_STATUS SrvStatus;

schSCManager = OpenSCManager(

NULL, // machine (NULL == local) NULL, // database (NULL == default) SC_MANAGER_ALL_ACCESS // access required ); if (!schSCManager) return -1;

schService = OpenService(schSCManager, ServiceName, SERVICE_ALL_ACCESS); if (!schService) {

RC = GetLastError();

CloseServiceHandle(schSCManager);

if (RC == ERROR_SERVICE_DOES_NOT_EXIST) return -2; else return -1; }

return_value = ControlService(schService, SERVICE_CONTROL_STOP, &SrvStatus) ? 1 : -1;

if(return_value) {

while(QueryServiceStatus(schService, &SrvStatus)) {

if ( SrvStatus.dwCurrentState == SERVICE_STOP_PENDING ) { if(!TimeoutSeconds) break;

if(TimeoutSeconds != -1) TimeoutSeconds--;

Sleep( 1000 ); } else { break; } }

if(SrvStatus.dwCurrentState == SERVICE_STOPPED) { return_value = 1; } else {

return_value = -1; } } else {

return_value = -2; }

RC = GetLastError();

CloseServiceHandle(schService); CloseServiceHandle(schSCManager); return return_value; }

四、各按钮代码如下: ①检测服务

if(ServiceIsRunning(\ MessageBox(\服务运行中......\ else MessageBox(\未检测到服务运行!\②停止服务

if(ServiceStop(\ MessageBox(\服务已停止运行!\③启动服务

if(ServiceStart(\ MessageBox(\服务已成功启动!\

Net Logon

WebClient

………………………………………………………………………………………………

void CFuwuDlg::OnButton1() { // TODO: Add your control notification handler code here

CString strTemp; GetDlgItemText(IDC_EDIT1,strTemp);

if(ServiceIsRunning(strTemp)==1) MessageBox(\服务运行中......\ else MessageBox(\未检测到服务运行!\ }

…… 此处隐藏:1334字,全部文档内容请下载后查看。喜欢就下载吧 ……
我调试了一个完整的VC检测服务、启动服务、停止服务的程.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/454262.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)