首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

连接异常,跪求, 有另外的建立服务的程序源码,非常感谢

2012-06-14 
连接错误,跪求高手指点,急!有另外的建立服务的程序源码,非常感谢VC6.0下建立了一个控制台程序,代码如下://

连接错误,跪求高手指点,急! 有另外的建立服务的程序源码,非常感谢
VC6.0下建立了一个控制台程序,代码如下:
// NTService.cpp : Defines the entry point for the console application.
//

#include <windows.h>
#include <stdio.h>

#define SLEEP_TIME 5000
#define LOGFILE "C:\MyServices\memstatus.txt"


SERVICE_STATUS ServiceStatus; 
SERVICE_STATUS_HANDLE hStatus; 

void ServiceMain(int argc, char** argv); 
void ControlHandler(DWORD request); 
int InitService();
int WriteToLog(char* str);


int main(int argc, char* argv[])
{
  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 argc, 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(
  "MemoryStatus", 
  (LPHANDLER_FUNCTION)ControlHandler); 
  if (hStatus == (SERVICE_STATUS_HANDLE)0) 
  { 
  // Registering Control Handler failed
  return; 
  }  
  // Initialize Service 
  error = InitService(); 
  if (!error) 
  {
  // Initialization failed
  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);
 
  MEMORYSTATUS memory;
  // The worker loop of a service
  while (ServiceStatus.dwCurrentState == 
  SERVICE_RUNNING)
  {
  char buffer[16];
  GlobalMemoryStatus(&memory);
  sprintf(buffer, "%d", memory.dwAvailPhys);
  int result = WriteToLog(buffer);
  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 stopped.");

  ServiceStatus.dwWin32ExitCode = 0; 
  ServiceStatus.dwCurrentState = SERVICE_STOPPED; 


  SetServiceStatus (hStatus, &ServiceStatus);
  return; 
 
  case SERVICE_CONTROL_SHUTDOWN: 
  WriteToLog("Monitoring stopped.");

  ServiceStatus.dwWin32ExitCode = 0; 
  ServiceStatus.dwCurrentState = SERVICE_STOPPED; 
  SetServiceStatus (hStatus, &ServiceStatus);
  return; 
   
  default:
  break;
  } 
 
  // Report current status
  SetServiceStatus (hStatus, &ServiceStatus);
 
  return; 
}


int WriteToLog(char* str)
{
  FILE* log;
  log = fopen(LOGFILE, "a+");
  if (log == NULL)
  return -1;
  fprintf(log, "%s ", str);
  fclose(log);
  return 0;
}

int InitService(){
  WriteToLog("Monitoring started.");
  return true;
}

运行后出现如下错误:
`Linking......
Test.obj: error LNK2001: unresolved external symbol _imp_StartServiceCtrlDispatcherA@4
Test.obj: error LNK2001: unresolved external symbol _imp_SetServiceStatus@8
Test.obj: error LNK2001: unresolved external symbol _imp_RegisterServiceCtrlHandlerA@8
Debug/Test.exe : fatal error LNK1120:3 unresolved externals
Error executing link.exe

[解决办法]
需要在LINK里加入ws2_32.lib

热点排行