如何知道某一个NT服务是不是在运行,如果它未运行,如何启动它?

检测NT某一服务是否运行可以按下面的步骤执行:

获得ServiceControl Manager的句柄:

SC_HANDLE shServiceManager = OpenSCManager( NULL,SERVICES_ACTIVE_DATABASE,SC_MANAGER_ALL_ACCESS);

然后获得用户希望检查的服务的句柄:

SC_HANDLE shMyService = OpenService(

shServiceManager, // 这个参数是从上面调用中获得的
"MyServiceName",
SERVICE_ALL_ACCESS);

有一个预定义的结构,在调用之前最好声明它的一个实例:

SERVICE_STATUS ssStatus;

这个结构个个域的作用大家自己看联机帮助了,只是为了检查某个服务是否运行,只要检查dwCurrentState就可以了:

if ( (QueryServiceStatus( shMyService, &ssStatus)) == 0 )
MessageBox(NULL, "Couldn't Query the service's status", "Query Service", MB_OK);

下面的代码用于检查服务是否被停止,如果停止则打开此服务:

if (ssStatus.dwCurrentState == SERVICE_STOPPED)
SC_HANDLE stService = OpenService(shServiceManager, "MyServiceName", SERVICE_START);