2010年11月30日星期二

DELPHI如何判断服务是否安装?如果安装如果判断其当前状态?运行?停止?暂停(转)

摘自:http://blog.sina.com.cn/s/blog_5430bd90010009na.html

正好前段时间用到这些功能,以下为示例代码,希望对你有用!
记得use WinSvc;

//-------------------------------------
// 获取某个系统服务的当前状态
//
// return status code if successful
// -1 if not
//
// return codes:
//   SERVICE_STOPPED
//   SERVICE_RUNNING
//   SERVICE_PAUSED
//
// following return codes are used to indicate that the service is in the
// middle of getting to one of the above states:
//   SERVICE_START_PENDING
//   SERVICE_STOP_PENDING
//   SERVICE_CONTINUE_PENDING
//   SERVICE_PAUSE_PENDING
//
// sMachine:
//   machine name, ie: \SERVER
//   empty = local machine
//
//sService
//   service name, ie: Alerter
//
function TFormConfig.ServiceGetStatus(sMachine, sService: string ): DWord;
var
  //service control
  //manager handle
  schm,
  //service handle
  schs: SC_Handle;
  //service status
  ss: TServiceStatus;
  //current service status
  dwStat : DWord;
begin
  dwStat := 0;
  //connect to the service
  //control manager
  schm := OpenSCManager(PChar(sMachine), Nil, SC_MANAGER_CONNECT);
  //if successful...
  if(schm  > 0)then
  begin
    //open a handle to
    //the specified service
    schs := OpenService(schm, PChar(sService), SERVICE_QUERY_STATUS);
    //if successful...
    if(schs  > 0)then
    begin
      //retrieve the current status
      //of the specified service
      if(QueryServiceStatus(schs, ss))then
      begin
        dwStat := ss.dwCurrentState;
      end;
      //close service handle
      CloseServiceHandle(schs);
    end;

    // close service control
    // manager handle
    CloseServiceHandle(schm);
  end;

  Result := dwStat;
end;

{判断某服务是否安装,未安装返回true,已安装返回false}
function TFormConfig.ServiceUninstalled(sMachine, sService : string ) : boolean;
begin
  Result := 0 = ServiceGetStatus(sMachine, sService);
end;

{判断某服务是否启动,启动返回true,未启动返回false}
function TFormConfig.ServiceRunning(sMachine, sService : string ) : boolean;
begin
  Result := SERVICE_RUNNING = ServiceGetStatus(sMachine, sService );
end;

{判断某服务是否停止,停止返回true,未停止返回false}
function TFormConfig.ServiceStopped(sMachine, sService : string ) : boolean;
begin
  Result := SERVICE_STOPPED = ServiceGetStatus(sMachine, sService );
end;

没有评论: