fuwuqi.c

来自「服务实验」· C语言 代码 · 共 124 行

C
124
字号
#include<windows.h>
#include<stdio.h>
#define SLEEP_TIME 5000
#define LOGFILE "C:\\Hello.txt"
SERVICE_STATUS ServiceStatus;
SERVICE_STATUS_HANDLE hStatus;

void ServiceMain(int atfc,char** argv);
void ControlHandler(DWORD request);
int WriteToLog(char* str)
{
	FILE* log;
	log=fopen(LOGFILE,"a+");
	if(log==NULL)
		return -1;
	fprintf(log,"%s\n",str);
	fclose(log);
	return 0;
}
int InitService()
{
	int result;
	result=WriteToLog("monitoring started");
	return(result);
}
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);
}

void ServiceMain(int atgc,char** argv)
{
    int error;
	ServiceStatus.dwServiceType =SERVICE_WIN32;
	ServiceStatus.dwCurrentState =SERVICE_START_PENDING;
	ServiceStatus.dwControlsAccepted =
		SERVICE_ACCEPT_STOP|
		SERVICE_ACCEPT_SHUTDOWN;
	ServiceStatus.dwWin32ExitCode =0;
	ServiceStatus.dwServiceSpecificExitCode =0;
	ServiceStatus.dwCheckPoint =0;
	ServiceStatus.dwWaitHint =0;

	hStatus=RegisterServiceCtrlHandler(
		"Hello",
		(LPHANDLER_FUNCTION)ControlHandler);
	if (hStatus == (SERVICE_STATUS_HANDLE)0) 
   { 
      // Registering Control Handler failed
      return; 
   } 
	
   // 初始化文档
   error = InitService(); 
   if (error) 
   {
      // 文档初始化失败
      ServiceStatus.dwCurrentState = 
         SERVICE_STOPPED; 
      ServiceStatus.dwWin32ExitCode = -1; 
      SetServiceStatus(hStatus, &ServiceStatus); 
      return; 
   } 
  
   // We report the running status to SCM. 
   ServiceStatus.dwCurrentState = 
      SERVICE_RUNNING; 
   SetServiceStatus (hStatus, &ServiceStatus);
 

   // The worker loop of a service
   while (ServiceStatus.dwCurrentState == 
          SERVICE_RUNNING)
   {
      int result=WriteToLog("HelloWorld");
	  if (result)
      {
         ServiceStatus.dwCurrentState = 
            SERVICE_STOPPED; 
         ServiceStatus.dwWin32ExitCode = -1; 
         SetServiceStatus(hStatus, 
                          &ServiceStatus);
         return;
      }
      Sleep(SLEEP_TIME);
   }
   return; 
}
void ControlHandler(DWORD request) 
{ 
   switch(request) 
   { 
      case SERVICE_CONTROL_STOP: 
      WriteToLog("monitoring ended");

         ServiceStatus.dwWin32ExitCode = 0; 
         ServiceStatus.dwCurrentState = SERVICE_STOPPED; 
         SetServiceStatus (hStatus, &ServiceStatus);
         return; 
 
      case SERVICE_CONTROL_SHUTDOWN: 
        WriteToLog("monitoring ended");
         ServiceStatus.dwWin32ExitCode = 0; 
         ServiceStatus.dwCurrentState = SERVICE_STOPPED; 
         SetServiceStatus (hStatus, &ServiceStatus);
         return; 
        
      default:
         break;
    } 
 
    // Report current status
    SetServiceStatus (hStatus, &ServiceStatus);
 
    return; 
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?