/*
名称:系统服务管理
语言:C++
介绍:对Windows系统服务的状态获取,服务暂停,开启,停止操作代码
*/
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;
}
版权声明: 此文为本站源创文章[或由本站编辑从网络整理改编], 转载请备注出处:http://www.sindsun.com/article-details-36.html [若此文确切存在侵权,请联系本站管理员进行删除!]