AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dienst Starten oder Beenden

Ein Thema von hedie · begonnen am 4. Apr 2008 · letzter Beitrag vom 5. Apr 2008
Antwort Antwort
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#1

Dienst Starten oder Beenden

  Alt 4. Apr 2008, 18:02
Hallo

Weiss jemand wie ich einen Dienst starten oder beenden kann?

Vielen Dank schonmal....
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Dienst Starten oder Beenden

  Alt 4. Apr 2008, 18:14
Bei Google suchenDienst starten delphi
Thomas
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#3

Re: Dienst Starten oder Beenden

  Alt 4. Apr 2008, 18:47
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;
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Dienst Starten oder Beenden

  Alt 5. Apr 2008, 03:51
ShellExecuteEx mit Net Start bzw. Net Stop
mit TShellExecuteInfo.lpVerb := 'runas' um Admin-Rechte anzufordern, denn ein Jeder darf das ja nicht.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz