包含头文件:#include <winsvc.h>
以下以web服务为例:
#include <winsvc.h>
void
CStartServiceDlg::OnBnClickedButton1()
{
SC_HANDLE
hSC = ::OpenSCManager( NULL,
NULL, GENERIC_EXECUTE);
if
( hSC == NULL)
{
TRACE(
"open SCManager error"
);
return
;
}
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
;
}