VC Windows系统服务创建代码
2016-03-07 13:06
603 查看
Windows系统服务创建步骤,常用类封装,废话不多说,直接上代码
WindwosService.h
JXServiceControl.cpp
转载请注明出处....
代码栗子:http://pan.baidu.com/s/1WHQ5w
WindwosService.h
#include "StdAfx.h" #include "JXServiceControl.h" JXServiceControl::JXServiceControl(void) { memset(sSname,0,MAX_PATH); memset(sShowName,0,MAX_PATH); memset(sSvcExePath,0,MAX_PATH); } JXServiceControl::~JXServiceControl(void) { } int JXServiceControl::ChangeServicePath() { SC_HANDLE scHandle = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT); SC_HANDLE hsev = NULL; if(scHandle != NULL) { hsev = OpenService(scHandle,sSname,SERVICE_ALL_ACCESS); if(hsev != NULL) { BOOL bRet = ChangeServiceConfig( hsev, SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, sSvcExePath, NULL, NULL, NULL, NULL, NULL, sShowName ); CloseServiceHandle(hsev); } else { CloseServiceHandle(scHandle); return 0; } CloseServiceHandle(scHandle); } else return -1; return 1; } int JXServiceControl::createService() { SC_HANDLE scHandle = OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE); if (scHandle == NULL) { return -1; } SC_HANDLE hsvc = CreateService(scHandle,sSname,sShowName,SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,SERVICE_AUTO_START, SERVICE_ERROR_IGNORE,sSvcExePath, NULL,NULL,NULL,NULL,NULL); if (hsvc != NULL) { CloseServiceHandle(hsvc); } else { return 0; } CloseServiceHandle(scHandle); return 1; } int JXServiceControl::deleteService() { SC_HANDLE scHandle = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT); SC_HANDLE hsev = NULL; if(scHandle != NULL) { hsev = OpenService(scHandle,sSname,SERVICE_ALL_ACCESS); SERVICE_STATUS mss; if(hsev != NULL) { QueryServiceStatus(hsev,&mss); if (mss.dwCurrentState != SERVICE_RUNNING) { ControlService(hsev,SERVICE_CONTROL_STOP,&mss); DeleteService(hsev); } CloseServiceHandle(hsev); } else { CloseServiceHandle(scHandle); return 0; } CloseServiceHandle(scHandle); } else return -1; return 1; } void JXServiceControl::startService() { SC_HANDLE scHandle = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT); SC_HANDLE hscv = NULL; if (scHandle != NULL) { hscv = OpenService(scHandle,sSname,SERVICE_START); if(hscv != NULL) { BOOL isSucess = StartService(hscv,0,NULL); DWORD err = 0; if (isSucess == 0) { err = GetLastError(); } CloseServiceHandle(hscv); } CloseServiceHandle(scHandle); } } void JXServiceControl::stopService() { SC_HANDLE scHandle = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT); SC_HANDLE hsev = NULL; if(scHandle != NULL) { hsev = OpenService(scHandle,sSname,SERVICE_ALL_ACCESS); SERVICE_STATUS mss; if(hsev != NULL) { QueryServiceStatus(hsev,&mss); if (mss.dwCurrentState == SERVICE_RUNNING) { ControlService(hsev,SERVICE_CONTROL_STOP,&mss); CloseServiceHandle(hsev); } } CloseServiceHandle(scHandle); } } BOOL JXServiceControl::isSvsRuning() { BOOL ret = FALSE; SC_HANDLE scHandle = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT); SC_HANDLE hsev = NULL; if(scHandle != NULL) { hsev = OpenService(scHandle,sSname,SERVICE_ALL_ACCESS); SERVICE_STATUS mss; if(hsev != NULL) { QueryServiceStatus(hsev,&mss); if (mss.dwCurrentState == SERVICE_RUNNING) { ret = TRUE; CloseServiceHandle(hsev); } } CloseServiceHandle(scHandle); } return ret; } BOOL JXServiceControl::isSvsExist() { BOOL ret = FALSE; SC_HANDLE scHandle = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT); SC_HANDLE hsev = NULL; if(scHandle != NULL) { hsev = OpenService(scHandle,sSname,SERVICE_ALL_ACCESS); DWORD err = GetLastError(); if (err == ERROR_SERVICE_DOES_NOT_EXIST) { ret = FALSE; } else { ret = TRUE; } if(hsev != NULL) { CloseServiceHandle(hsev); CloseServiceHandle(scHandle); } } return ret; } void JXServiceControl::SetServiceName(const char * str) { strcpy_s(sSname,MAX_PATH,str); } void JXServiceControl::SetServiceShowName(const char *str) { strcpy_s(sShowName,MAX_PATH,str); } void JXServiceControl::SetExePath(const char *str) { strcpy_s(sSvcExePath,MAX_PATH,str); }
JXServiceControl.cpp
转载请注明出处....
代码栗子:http://pan.baidu.com/s/1WHQ5w
相关文章推荐
- Java实现冒泡排序算法
- 【VBA研究】变量定义的类型和实际赋值类型
- Python ORM SQLAlchemy 的中文乱码问题解决
- c++primer(第五版) 第十一章 关联容器习题答案
- 用键盘控制鼠标移动的Python脚本
- javaWeb快速开发必备(三 spring配置)
- Java基础之线程心得(转)
- javaWeb快速开发必备(二 hibernate,jdbc相关配置)
- eclipse+SVN重输入用户名和密码
- [转]java 里面保留字volatile及其与synchronized的区别
- c++11新特性--decltype auto
- 2016蓝桥杯假期任务之《复数四则运算》
- JAVA基础——输出笔记
- PHP - 继承 - 子类使用父类方法
- Java中获取键盘输入值的三种方法
- 第一章 java基础
- eBPF编程
- javaWeb快速开发必备(一 web/struts配置)(ctrl+c,ctrl+v)
- C++——boost:asio的使用
- UMEditor(UEditor缩减版)与Struts2集成实现富文本框粘贴图片