记得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;