[cpp]
#include <Windows.h>
#include <winsvc.h>
#include <stdio.h>
//////////////////////////////////////////////////////////////////////////
//停止服务 0成功
int Stop()
{
// 打开服务管理对象
SC_HANDLE hSC = ::OpenSCManager(NULL, NULL, GENERIC_EXECUTE);
if( hSC == NULL){
printf("打开SCManager出错n");
return -1;
}
// 打开服务。
SC_HANDLE hSvc = ::OpenService(hSC, "这里填服务名称", SERVICE_QUERY_STATUS | SERVICE_STOP);
if( hSvc == NULL){
printf("打开服务出错n");
::CloseServiceHandle(hSC);
return -1;
}
// 获得服务的状态
SERVICE_STATUS status;
if( ::QueryServiceStatus(hSvc, &status) == FALSE){
printf("获取服务状态出错n");
::CloseServiceHandle(hSvc);
::CloseServiceHandle(hSC);
return -1;
}
//如果处于运行状态则停止服务。
if(status.dwCurrentState == SERVICE_RUNNING){
// 停止服务
if( ::ControlService(hSvc, SERVICE_CONTROL_STOP, &status) == FALSE){
printf("停止服务出错n");
::CloseServiceHandle(hSvc);
::CloseServiceHandle(hSC);
return -1;
}
// 等待服务停止
while(::QueryServiceStatus( hSvc, &status) == TRUE){
::Sleep( status.dwWaitHint);
if( status.dwCurrentState == SERVICE_STOPPED){
printf("成功停止n");
::CloseServiceHandle(hSvc);
::CloseServiceHandle(hSC);
return 0;
}
}
}
printf("已经处于停止状态了n");
::CloseServiceHandle( hSvc);
::CloseServiceHandle( hSC);
return 0;
}
//////////////////////////////////////////////////////////////////////////
//开启服务 0成功
int Start()
{
// 打开服务管理对象
SC_HANDLE hSC = ::OpenSCManager(NULL, NULL, GENERIC_EXECUTE);
if( hSC == NULL){
printf("打开SCManager出错n");
return -1;
}
// 打开服务。
SC_HANDLE hSvc = ::OpenService(hSC, "这里填服务名称", SERVICE_QUERY_STATUS | SERVICE_START);
if( hSvc == NULL){
printf("打开服务出错n");
::CloseServiceHandle(hSC);
return -1;
}
// 获得服务的状态
SERVICE_STATUS status;
if( ::QueryServiceStatus(hSvc, &status) == FALSE){
printf("获取服务状态出错n");
::CloseServiceHandle(hSvc);
::CloseServiceHandle(hSC);
return -1;
}
//如果处于非运行状态则开启服务。
if(!(status.dwCurrentState == SERVICE_RUNNING)){
// 启动服务
if( ::StartService( hSvc, NULL, NULL) == FALSE){
printf("启动服务出错n");
::CloseServiceHandle( hSvc);
::CloseServiceHandle( hSC);
return -1;
}
// 等待服务启动
while( ::QueryServiceStatus( hSvc, &status) == TRUE){
::Sleep( status.dwWaitHint);
if( status.dwCurrentState == SERVICE_RUNNING){
printf("成功启动服务");
::CloseServiceHandle(hSvc);
::CloseServiceHandle(hSC);
return 0;
}
}
}
printf("已经处于运行状态了n");
::CloseServiceHandle(hSvc);
::CloseServiceHandle(hSC);
return 0;
}
int main(int argc, char* argv[])
{
Stop();
Start();
return 0;
}
[/cpp]