Delphi 服務程式[5] 描述、開啟、停止、檢索、狀態
阿新 • • 發佈:2021-01-21
Delphi 服務程式[5] 描述、開啟、停止、檢索
1、服務程式中不能設定描述,可以通過以下方法設定:
uses Registry; procedure TSerTest.ServiceAfterInstall(Sender: TService); var Reg: TRegistry; begin Reg := TRegistry.Create(KEY_READ or KEY_WRITE); try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\' + Name, false) then begin Reg.WriteString('Description', 'This is a description for my fine Service Application.'); Reg.CloseKey; end; finally Reg.Free; end; end;
2、開啟、停止、檢索、狀態
uses Windows,Messages,SysUtils,Winsvc,Dialogs; //開啟服務 function StartServices(Const SvrName: String): Boolean; var sMgr, sHandle:SC_HANDLE; c:PChar; begin Result:=False; sMgr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS); if sMgr <=0 then Exit; sHandle := OpenService(sMgr, PChar(SvrName), SERVICE_ALL_ACCESS); if sHandle <=0 then Exit; try Result:=StartService(sHandle, 0, c); CloseServiceHandle(sHandle); CloseServiceHandle(sMgr); except CloseServiceHandle(sHandle); CloseServiceHandle(sMgr); end; end; //停止服務 function StopServices(Const SvrName: String): Boolean; var sMgr, sHandle: SC_HANDLE; d: TServiceStatus; begin Result := False; sMgr := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); if sMgr <=0 then Exit; sHandle := OpenService(sMgr,PChar(SvrName),SERVICE_ALL_ACCESS); if sHandle <=0 then Exit; try Result:=ControlService(sHandle, SERVICE_CONTROL_STOP,d); CloseServiceHandle(sMgr); CloseServiceHandle(sHandle); except CloseServiceHandle(sMgr); CloseServiceHandle(sHandle); end; end; //查詢當前服務的狀態 function QueryServiceStatu(Const SvrName: String): String; var sMgr, sHandle: SC_HANDLE; d: TServiceStatus; begin Result := '未安裝'; sMgr := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); if sMgr <=0 then Exit; sHandle := OpenService(sMgr,PChar(SvrName),SERVICE_ALL_ACCESS); if sHandle <= 0 then Exit; try QueryServiceStatus(sHandle, d); if d.dwCurrentState = SERVICE_RUNNING then Result := '啟動' //Run else if d.dwCurrentState = SERVICE_RUNNING then Result := 'Wait' //Runing else if d.dwCurrentState = SERVICE_START_PENDING then Result := 'Wait' //Pause else if d.dwCurrentState = SERVICE_STOP_PENDING then Result := '停止' //Pause else if d.dwCurrentState = SERVICE_PAUSED then Result := '暫停' //Pause else if d.dwCurrentState = SERVICE_STOPPED then Result := '停止' //Stop else if d.dwCurrentState = SERVICE_CONTINUE_PENDING then Result := 'Wait' //Pause else if d.dwCurrentState = SERVICE_PAUSE_PENDING then Result := 'Wait'; //Pause CloseServiceHandle(sMgr); CloseServiceHandle(sHandle); except CloseServiceHandle(sMgr); CloseServiceHandle(sHandle); end; end; function IsServiceExisted(Const SvrName: String):Boolean; var sMgr, sHandle:SC_HANDLE; begin Result:=False; sMgr := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); if sMgr <= 0 then Exit; sHandle :=OpenService(sMgr, PChar(SvrName), STANDARD_RIGHTS_REQUIRED); if sHandle > 0 then Result := True; end;
建立時間:2021.01.21 更新時間: