日期:2014-05-17  浏览次数:20945 次

一个服务程序,在xp正常运行,在2003启动报1053错误
一个服务程序,在中文xp正常运行,在英文2003系统启动报1053错误

启动部分代码如下

SERVICE_STATUS ServiceStatus; 
SERVICE_STATUS_HANDLE hStatus; 

////////////////////////////////////////////////////////////
// Make the forward definitions of functions prototypes.
//
////////////////////////////////////////////////////////////
void ServiceMain(int argc, char** argv); 
void ControlHandler(DWORD request); 
int InitService();
extern int goipmain();

extern void getcfg(char *file);

int WriteToLog(char* str)
{
  FILE* log;
  log = fopen(logfile, "a+");
  if (log == NULL){
  OutputDebugString("Log file open failed.");
  return -1;
  }
  time_t mytime=time(0);
  fprintf(log, "%s %s", str,ctime(&mytime));
  fclose(log);
  return 0;
}

// Service initialization
int InitService() 

OutputDebugString("Monitoring started.");
int result;
result = WriteToLog("Monitoring started.");
return(result); 
}

// Control Handler
void ControlHandler(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 status
  SetServiceStatus (hStatus, &ServiceStatus);
 
  return; 
}

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, &Se