设为首页 加入收藏

TOP

VC关于windows服务状态更改(二)
2013-07-22 18:15:04 来源: 作者: 【 】 浏览:212
Tags:关于 windows 服务 状态 更改

 

  printf("OpenService failed (%d)\n", GetLastError());

  CloseServiceHandle(schSCManager);

  return;

  }

  // Change the service description.

  sd.lpDescription = szDesc;

  if( !ChangeServiceConfig2(

  schService,                 // handle to service

  SERVICE_CONFIG_DESCRIPTION, // change: description

  &sd) )                      // new description

  {

  printf("ChangeServiceConfig2 failed\n");

  }

  else printf("Service description updated successfully.\n");

  CloseServiceHandle(schService);

  CloseServiceHandle(schSCManager);

  }

  启动、停止服务

  [cpp] #include <winsvc.h>

  void CStartServiceDlg::OnBnClickedButton1()

  {

  // 打开服务管理对象

  SC_HANDLE hSC = ::OpenSCManager( NULL,

  NULL, GENERIC_EXECUTE);

  if( hSC == NULL)

  {

  TRACE( "open SCManager error");

  return;

  }

  // 打开www服务。

  SC_HANDLE hSvc = ::OpenService( hSC, "W3SVC",

  SERVICE_START | SERVICE_QUERY_STATUS | SERVICE_STOP);

  if( hSvc == NULL)

  {

  TRACE( "Open www erron。");

  ::CloseServiceHandle( hSC);

  return;

  }

  // 获得服务的状态

  SERVICE_STATUS status;

  if( ::QueryServiceStatus( hSvc, &status) == FALSE)

  {

  TRACE( "Get Service state error。");

  ::CloseServiceHandle( hSvc);

  ::CloseServiceHandle( hSC);

  return;

  }

  //如果处于停止状态则启动服务,否则停止服务。

  if( status.dwCurrentState == SERVICE_RUNNING)

  {

  // 停止服务

  if( ::ControlService( hSvc,

  SERVICE_CONTROL_STOP, &status) == FALSE)

  {

  TRACE( "stop service error。");

  ::CloseServiceHandle( hSvc);

  ::CloseServiceHandle( hSC);

  return;

  }

  // 等待服务停止

  while( ::QueryServiceStatus( hSvc, &status) == TRUE)

  {

  ::Sleep( status.dwWaitHint);

  if( status.dwCurrentState == SERVICE_STOPPED)

  {

  AfxMessageBox( "stop success。");

  ::CloseServiceHandle( hSvc);

  ::CloseServiceHandle( hSC);

  return;

  }

  }

  }

  else if( status.dwCurrentState == SERVICE_STOPPED)

  {

  // 启动服务

  if( ::StartService( hSvc, NULL, NULL) == FALSE)

  {

  TRACE( "start service error。");

  ::CloseServiceHandle( hSvc);

  ::CloseServiceHandle( hSC);

  return;

  }

  // 等待服务启动

  while( ::QueryServiceStatus( hSvc, &status) == TRUE)

  {

  ::Sleep( status.dwWaitHint);

  if( status.dwCurrentState == SERVICE_RUNNING)

  {

  AfxMessageBox( "start success。");

  ::CloseServiceHandle( hSvc);

  ::CloseServiceHandle( hSC);

  return;

  }

  }

  }

  TRACE( "start error。");

  ::CloseServiceHandle( hSvc);

  ::CloseServiceHandle( hSC);

  return;

  }

        

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇VC选项卡控件的使用方法 下一篇VC进程通信之共享存储区

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: