如何用API管理服务

如何用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

你可能感兴趣的:(如何用API管理服务)