⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fuwuqi.c

📁 服务实验
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -