![]() |
Dienst Starten oder Beenden
Hallo
Weiss jemand wie ich einen Dienst starten oder beenden kann? Vielen Dank schonmal.... |
Re: Dienst Starten oder Beenden
:arrow:
![]() |
Re: Dienst Starten oder Beenden
Den Dienst über die Registry zu installieren ist nicht zu empfehlen. Die Struktur könnte sich schon beim nächsten Release ändern.
Ich verwende gerne das VCL TService und daher habe ich folgendes gemacht: TServiceApplication enthält schon installation und deinstallationscode, so dass man es nutzen sollte. Leider ist es nicht public.
Delphi-Quellcode:
TServiceApplicationEx = class(TServiceApplication)
public procedure RegisterServices(Install, Silent: Boolean); end; { TServiceApplicationEx } procedure TServiceApplicationEx.RegisterServices(Install, Silent: Boolean); begin inherited; end; Starten kann man den Dienst vom Type TService dann mit dieser (angepassten) Toolfunktion.
Delphi-Quellcode:
uses JwaWindows;
procedure StartTheService(Service : TService); var hSCM: SC_HANDLE; hSvc: SC_HANDLE; args: array of PChar; i : Integer; begin hSCM := OpenSCManager(nil, SERVICES_ACTIVE_DATABASEW, SC_MANAGER_CONNECT); if hSCM = 0 then RaiseLastOSError; try hSvc := OpenService(hSCM, PChar(Service.Name), SERVICE_START); if hSvc = 0 then RaiseLastOSError; try SetLength(args, ParamCount); for i := 0 to ParamCount-1 do begin GetMem(args[i], Length(ParamStr(i+1))+2); StringCchCopy(args[i], Length(ParamStr(i+1))+2, PChar(ParamStr(i+1))); end; try if not StartServiceA(hSvc, Length(args), @args[0]) then RaiseLastOSError; finally for i := 0 to ParamCount-1 do begin FreeMem(args[i]); end; end; finally CloseServiceHandle(hSvc); end; finally CloseServiceHandle(hScm); end; end; Man muss noch die Dienstanwendung etwas anpassen:
Delphi-Quellcode:
program xy;
begin SvcMgr.Application.Free; SvcMgr.Application := TServiceApplicationEx.Create(nil); SvcMgr.Application.Initialize; SvcMgr.Application.CreateForm(TMyService, MyService); if xy then StartService(MyService) and exit here else SvcMgr.Application.Run; |
Re: Dienst Starten oder Beenden
ShellExecuteEx mit Net Start bzw. Net Stop
mit TShellExecuteInfo.lpVerb := 'runas' um Admin-Rechte anzufordern, denn ein Jeder darf das ja nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz