龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

用VC++建立Service服务应用程序(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
//模拟服务的运行,10后自动退出。应用时将主要任务放于此即可 int i = 0; while (i 10) { Sleep(1000); i++; } // status.dwCurrentState = SERVICE_STOPPED; SetServiceStatus(hServic

 //模拟服务的运行,10后自动退出。应用时将主要任务放于此即可

 int i = 0;
 while (i < 10)
 {
  Sleep(1000);
  i++;
 }
 //

 status.dwCurrentState = SERVICE_STOPPED;
 SetServiceStatus(hServiceStatus, &status);
 LogEvent(_T("Service stopped"));
}

  六、在主线程函数里注册控制函数和程序执行主体

void WINAPI ServiceMain()
{
 …

 //如上,这里主要是说明这就是程序的执行体
 //模拟服务的运行,10后自动退出。应用时将主要任务放于此即可

 int i = 0;
 while (i < 10)
 {
  Sleep(1000);
  i++;
 }
 …
}

  七、在main函数里注册添加安装、删除、注册主函数

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,

int nCmdShow)
{
 Init();
 dwThreadID = ::GetCurrentThreadId();
 SERVICE_TABLE_ENTRY st[] =
 {
  { szServiceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain },
  { NULL, NULL }
 };

 if (stricmp(lpCmdLine, "/install") == 0)
 {
  Install();
 }
 else if (stricmp(lpCmdLine, "/uninstall") == 0)
 {
  Uninstall();
 }
 else
 {
  if (!::StartServiceCtrlDispatcher(st))
  {
   LogEvent(_T("Register Service Main Function Error!"));
  }
 }
 return 0;
}

  八、总结

  其它做一个服务程序并难,主要是懂得程序的执行体放于哪里?和注册程序的主函数和注册控制函数,如果这两个没有注册的话,你就程序就不知道如何去控制了。status.dwControlsAccepted = SERVICE_ACCEPT_STOP;这个也重要,如果你没有设置的话,那么服务就不会受你控制了。

  需要源码的朋友可以联系我(niyingny@hotmail.com)

精彩图集

赞助商链接