日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C语言编写Windows服务程序

發布時間:2025/3/20 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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服务程序的全部內容,希望文章能夠幫你解決所遇到的問題。

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