日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

C语言编写Windows服务程序

發布時間:2025/3/20 windows 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言编写Windows服务程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C語言編寫Windows服務程序 原文:C語言編寫Windows服務程序

#include <Windows.h> #include <stdio.h>#define SLEEP_TIME 5000 // 間隔時間 #define LOGFILE "C:\\memstatus.txt" // 信息輸出文件SERVICE_STATUS ServiceStatus; // 服務狀態 SERVICE_STATUS_HANDLE hStatus; // 服務狀態句柄void ServiceMain(int argc, char** argv); void CtrlHandler(DWORD request); int InitService();int WriteToLog(char* str) {FILE* pfile;fopen_s(&pfile,LOGFILE,"a+");if (pfile==NULL){return -1;}fprintf_s(pfile,"%s\n",str);fclose(pfile);return 0; }// Service initialization int InitService() { OutputDebugString("Monitoring started.");int result;result = WriteToLog("Monitoring started.");return(result); } // Control Handler void CtrlHandler(DWORD request) {switch (request){case SERVICE_CONTROL_STOP:OutputDebugString("Monitoring stopped.");WriteToLog("Monitoring stopped.");ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus (hStatus, &ServiceStatus);return;case SERVICE_CONTROL_SHUTDOWN:OutputDebugString("Monitoring stopped.");WriteToLog("Monitoring stopped.");ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus (hStatus, &ServiceStatus);return;default:break;}// Report current statusSetServiceStatus (hStatus, &ServiceStatus);return; }void ServiceMain(int argc, char** argv) {int error;ServiceStatus.dwServiceType = SERVICE_WIN32;ServiceStatus.dwCurrentState = SERVICE_START_PENDING;ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_STOP;//在本例中只接受系統關機和停止服務兩種控制命令ServiceStatus.dwWin32ExitCode = 0;ServiceStatus.dwServiceSpecificExitCode = 0;ServiceStatus.dwCheckPoint = 0;ServiceStatus.dwWaitHint = 0;hStatus = ::RegisterServiceCtrlHandler("MemoryStatus", (LPHANDLER_FUNCTION)CtrlHandler);if (hStatus == (SERVICE_STATUS_HANDLE)0){WriteToLog("RegisterServiceCtrlHandler failed");return;}WriteToLog("RegisterServiceCtrlHandler success");// Initialize Service error = InitService();if (error) {// Initialization failedServiceStatus.dwCurrentState = SERVICE_STOPPED; ServiceStatus.dwWin32ExitCode = -1; SetServiceStatus(hStatus, &ServiceStatus); return; } // 向SCM 報告運行狀態ServiceStatus.dwCurrentState = SERVICE_RUNNING;SetServiceStatus (hStatus, &ServiceStatus);// 下面就開始任務循環了,你可以添加你自己希望服務做的工作MEMORYSTATUS memstatus;while (ServiceStatus.dwCurrentState == SERVICE_RUNNING){char buffer[16];GlobalMemoryStatus(&memstatus);int availmb = memstatus.dwAvailPhys/1024/1024;sprintf_s(buffer,100,"available memory is %dMB",availmb);OutputDebugString(buffer);int result = WriteToLog(buffer);if (result){ServiceStatus.dwCurrentState = SERVICE_STOPPED; ServiceStatus.dwWin32ExitCode = -1; SetServiceStatus(hStatus, &ServiceStatus);return;}Sleep(SLEEP_TIME);}WriteToLog("service stopped"); }void main() {SERVICE_TABLE_ENTRY ServiceTable[2];ServiceTable[0].lpServiceName="MemoryStatus";ServiceTable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain;ServiceTable[1].lpServiceName=NULL;ServiceTable[1].lpServiceProc=NULL;StartServiceCtrlDispatcher(ServiceTable);}

?

命令行操作:


?

?

注意我這里在sc create MemortyStatus binpath= D:\MemoryStatus.exe里面有個拼寫錯誤,MemoryStatus寫成了MemortyStatus,多了個t,這個沒關系,只要你在下面操作時候將錯就錯就行了。

運行結果:

?

最后,停止和刪除服務:

?

參考:

http://www.vckbase.com/index.php/wv/1193

http://www.2cto.com/kf/201111/111990.html

posted on 2014-12-16 08:10 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/lonelyxmas/p/4166269.html

總結

以上是生活随笔為你收集整理的C语言编写Windows服务程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。