如何用API管理服务
郑恒
获取服务的状态(以远程注册表操作服务以例)
SC_HANDLE hSC = OpenSCManager(NULL,NULL,SC_MANAGER_QUERY_LOCK_STATUS) ;
if( hSC )
{
SC_HANDLE hService=
OpenService(hSC,_T("Remote Registry Service"),
SERVICE_QUERY_STATUS ) ;
if( hService )
{
SERVICE_STATUS ss ;
if( QueryServiceStatus( hService , &ss ) )
{
switch( ss.dwCurrentState )
{
case SERVICE_RUNNING: // 服务处在运行状态
break;
case SERVICE_STOPPED: // 服务已停止
break;
case SERVICE_PAUSED: // 服务暂停执行
break;
... // 其它状态参考MSDN
}
}
CloseServiceHandle( hService ) ;
}
CloseServiceHandle ( hSC ) ;
}
改变服务的状态:
SC_HANDLE hSC = OpenSCManager(...);
// 打开指定的服务,参数参考上面的代码
// 注意设置好正确的权限!
SC_HANDLE hService=OpenService(...);
// 启动服务
StartService( hService , NULL , NULL ) ;
// 停止服务
SERVICE_STATUS ss ;
ControlService( hService , SERVICE_CONTROL_STOP , &ss ) ;
改变服务的启动类型:
ChangeServiceConfig( hService , SERVICE_WIN32_SHARE_PROCESS ,
SERVICE_AUTO_START , // 自动启动
// SERVICE_DISABLED 禁止启动
// 更多的启动类型参考MSDN
SERVICE_ERROR_NORMAL ,
NULL ,
NULL ,
NULL ,
NULL ,
NULL ,
NULL ,
lpDisplayName ) ;// display name