加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows服务程序的编写

发布时间:2020-12-14 02:55:22 所属栏目:Windows 来源:网络整理
导读:#include windows.h #include stdio.h #include stdlib.h #include tchar.h #define SERVICE_NAME "SDK_Service" SERVICE_STATUS ServiceStatus; SERVICE_STATUS_HANDLE hServiceStatusHandle; void WINAPI service_main(int argc,char** argv); void WINAPI
#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <tchar.h> #define SERVICE_NAME "SDK_Service" 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:%dn",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("c:test.txt","w"); //add your service thread here HANDLE task_handle = CreateThread(NULL,NULL,srv_core_thread,NULL); if (task_handle == NULL) { fprintf(log,"create srv_core_thread failedn"); } // 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 function int 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; }

编译生成exe
用命令启动 (其实是可以双击运行的)
这么要注意是目录路径这个问题windows目录向来就是恶心的我换了路径就行了。
我放在F:下
管理员运行cmd


打开服务管理器 services.msc



https://blog.csdn.net/Fei_Liu/article/details/73395233
https://blog.csdn.net/qq_32688731/article/details/78323565
https://blog.csdn.net/u010499449/article/details/56671118
https://blog.csdn.net/fin86889003/article/details/26255387#
https://blog.csdn.net/flyingleo1981/article/details/53525194

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读