delphi 判断系统服务是否运行  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 判断系统服务是否运行


//方法1
uses WinSVC;

function isServiceRunning(ServiceName : AnsiString): Boolean;
var
 aServiceControl : SC_Handle;
 aService : SC_Handle;
 status: TServiceStatus;
begin
 Result := False;
 aService := 0;
 aServiceControl := OpenSCManager(nil, nil, SC_MANAGER_CONNECT);
 if aServiceControl = 0 then Exit;
 try
   aService := OpenService(aServiceControl, PAnsiChar(ServiceName), SERVICE_QUERY_STATUS);
   if aService = 0 then Exit;
   if not QueryServiceStatus(aService, status)
     then Exit;
   Result := status.dwCurrentState = SERVICE_RUNNING;
 finally
   if aService <> 0 then CloseServiceHandle(aService);
   if aServiceControl <> 0 then CloseServiceHandle(aServiceControl)
 end;
end;

//方法2
uses ActiveX,ComObj;

function isServiceRunning(ServiceName: string): Boolean;
const
 wbemFlagForwardOnly = $00000020;
var
 FSWbemLocator : OLEVariant;
 FWMIService   : OLEVariant;
 FWbemObjectSet: OLEVariant;
 FWbemObject   : OLEVariant;
 oEnum         : IEnumvariant;
 iValue        : LongWord;
begin;
 FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
 FWMIService   := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
 FWbemObjectSet:= FWMIService.ExecQuery('SELECT Name, State FROM Win32_Service WHERE Name="'+ServiceName+'" and State="Running"','WQL',wbemFlagForwardOnly);
 oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
 if oEnum.Next(1, FWbemObject, iValue) = S_OK then
 begin
   Result := True;
   FWbemObject := Unassigned;
 end
 else
   Result := False;
end;

推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.039296865463257 seconds