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

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

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
//创建服务 SC_HANDLE hService = ::CreateService( hSCM, szServiceName, szServiceName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, szFilePath, NULL, NU

 //创建服务
 
 SC_HANDLE hService = ::CreateService(
  hSCM, szServiceName, szServiceName,
  SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
  SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
  szFilePath, NULL, NULL, _T(""), NULL, NULL);

 ::CloseServiceHandle(hService);
 ::CloseServiceHandle(hSCM);
}

BOOL Uninstall();
{
 //这里列出主要的两个函数,其它的可以在代码里找。
 //打开服务控制管理器

 OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);

 //打开服务

 OpenService(hSCM, szServiceName, SERVICE_STOP | DELETE);

 //停止服务

 ControlService(hService, SERVICE_CONTROL_STOP, &status);

 //删除服务

 DeleteService(hService);

 …
}

 五、添加服务主线程函数和控制函数

  这里调用RegisterServiceCtrlHandler来注册服务的控制函数,这里要设置status.dwControlsAccepted为SERVICE_ACCEPT_STOP,否则你不能控制这个服务的状态。

void WINAPI ServiceMain()
{
 // Register the control request handler

 status.dwCurrentState = SERVICE_START_PENDING;
 status.dwControlsAccepted = SERVICE_ACCEPT_STOP;//这个要使用,否则你不能控制

 //注册服务控制

 hServiceStatus = RegisterServiceCtrlHandler(szServiceName, ServiceStrl);
 if (hServiceStatus == NULL)
 {
  LogEvent(_T("Handler not installed"));
  return;
 }
 SetServiceStatus(hServiceStatus, &status);
 status.dwWin32ExitCode = S_OK;
 status.dwCheckPoint = 0;
 status.dwWaitHint = 0;
 status.dwCurrentState = SERVICE_RUNNING;
 SetServiceStatus(hServiceStatus, &status);

精彩图集

赞助商链接