C++快速创建Windows服务
来源:互联网 发布:手机剪裁照片的软件 编辑:程序博客网 时间:2024/06/05 20:20
C++快速创建Windows服务
最简单的Windows服务可以是一个Win32控制台程序,创建一个Windows服务的流程如下:
- 创建一个空的Win32控制台程序;
- 新建一个cpp文件,将模板代码拷入文件中;
- 在服务的核心线程中添加工作代码自行扩展,并且编译工程生成exe文件;
在命令行中运行指令创建并运行服务;
sc create service_demo binpath= “F:\service_demo.exe” displayname= “service_displayname”
sc start service_demo注意:等号’=’后面要有一个空格
// windows服务模板#include "Windows.h"#define SERVICE_NAME "srv_demo"SERVICE_STATUS ServiceStatus;SERVICE_STATUS_HANDLE hServiceStatusHandle;void WINAPI service_main(int argc, char** argv); void WINAPI ServiceHandler(DWORD fdwControl);TCHAR szSvcName[80];SC_HANDLE schSCManager;SC_HANDLE schService;int uaquit;FILE* log;DWORD WINAPI srv_core_thread(LPVOID para){ // 服务核心线程,将服务的工作代码放在此线程 int i = 0; for(;;) { if(uaquit) { break; } fprintf(log,"srv_core_thread run time count:%d\n",i++); Sleep(5000); } return NULL; } void WINAPI ServiceHandler(DWORD fdwControl){switch(fdwControl) { case SERVICE_CONTROL_STOP: case SERVICE_CONTROL_SHUTDOWN: ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0; uaquit= 1; //add you quit code here if(log != NULL) fclose(log); break; default: return; }; if (!SetServiceStatus(hServiceStatusHandle, &ServiceStatus)) { DWORD nError = GetLastError(); } }void WINAPI service_main(int argc, char** argv) { ServiceStatus.dwServiceType = SERVICE_WIN32; ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE; ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwServiceSpecificExitCode = 0; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0; hServiceStatusHandle = RegisterServiceCtrlHandler(_T(SERVICE_NAME), ServiceHandler); if (hServiceStatusHandle==0) { DWORD nError = GetLastError(); } //add your init code here log = fopen("d:\\test.txt","w"); //add your service thread here HANDLE task_handle = CreateThread(NULL,NULL,srv_core_thread,NULL,NULL,NULL); if(task_handle == NULL) { fprintf(log,"create srv_core_thread failed\n"); } // Initialization complete - report running status ServiceStatus.dwCurrentState = SERVICE_RUNNING; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 9000; if(!SetServiceStatus(hServiceStatusHandle, &ServiceStatus)) { DWORD nError = GetLastError(); } } //do not change main functionint main (int argc, const char *argv[]){ SERVICE_TABLE_ENTRY ServiceTable[2]; ServiceTable[0].lpServiceName = _T(SERVICE_NAME); ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)service_main; ServiceTable[1].lpServiceName = NULL; ServiceTable[1].lpServiceProc = NULL; // 启动服务的控制分派机线程 StartServiceCtrlDispatcher(ServiceTable); return 0;}
参考:http://blog.csdn.net/chenyujing1234
阅读全文
0 0
- 创建Windows服务(C++)
- 创建Windows服务(C++)
- .net快速创建windows服务
- C++快速创建Windows服务
- c/c++创建Windows服务
- C#Windows服务程序的快速开发
- 用C#创建Windows(NT)服务
- 用C#创建Windows(NT)服务
- 用C#创建Windows(NT)服务
- 用C#创建Windows(NT)服务
- 用C#创建Windows(NT)服务
- 用C#创建Windows(NT)服务
- 用C#创建Windows(NT)服务
- 用C#创建Windows(NT)服务
- 用C#创建Windows(NT)服务
- 用C/C++创建windows服务程序
- 用C/C++创建windows服务程序
- 用C/C++创建windows服务程序
- 智能点餐+跨界娱乐+互动营销+移动支付=智慧餐桌
- 判断一个数组是不是二叉搜索树的后序遍历
- 图像处理11:添加logo
- STM32f4学习之路--时钟
- highway network总结
- C++快速创建Windows服务
- bash 中 $ 与 ! 的使用
- Maze(CodeForces
- Hystrx权威指南--Hystrix调用方法解析
- Jenkins 之 回滚发布操作
- POJ1182食物链之并查集解法
- linux下安装c++ rabbitmq客户端SimpleAmqpClient
- 某次压测时物理内存被用光 Tomcat 被 Kernel kill 掉的案例
- 如何快速高效学习一门新语言