AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Service aus Anwendung installieren
Thema durchsuchen
Ansicht
Themen-Optionen

Service aus Anwendung installieren

Ein Thema von TUX_der_Pinguin · begonnen am 1. Okt 2013 · letzter Beitrag vom 1. Okt 2013
Antwort Antwort
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#1

Service aus Anwendung installieren

  Alt 1. Okt 2013, 16:48
Hallo DPler,

ich versuche mich grade an einem kleinen Tool mit dem ich einen Service Steuern kann, also installieren, starten, stoppen und deinstallieren.

Bisher habe ich das manuell in der Kommandozeile erledigt.

Service installieren und starten
Code:
Service.exe /INSTALL
net start Service
Service stoppen und deinstallieren
Code:
net stop Service
Service.exe /UNINSTALL
Jetzt soll das ein kleines Tool machen, das klappt soweit auch alles nur habe ich gerade gemerkt das
wenn ich den Service installiere das Ereignis 'OnAfterInstall' des Service nicht ausgelöst wird.
Und ich habe keine Ahnung warum.

Hier die Funktion mit der in meinen Service installiere.
Delphi-Quellcode:
function InstallService(Machine, ServiceName, DisplayName, FilePath: String): Boolean;
var
  bCreated: Boolean;
  SCManHandle: SC_Handle;
  SvcHandle: SC_Handle;

begin
  //init
  bCreated := False;

  //Service Manager öffnen
  SCManHandle := OpenSCManager(PChar(Machine), nil, SC_MANAGER_ALL_ACCESS);
  if SCManHandle > 0 then begin

    //Service erstellen (Dienst installieren)
    SvcHandle := CreateService(SCManHandle, PChar(ServiceName), PChar(DisplayName), SC_MANAGER_CONNECT or SC_MANAGER_ENUMERATE_SERVICE or SC_MANAGER_MODIFY_BOOT_CONFIG or SC_MANAGER_QUERY_LOCK_STATUS or STANDARD_RIGHTS_READ, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, PChar(FilePath), nil, nil, nil, nil, nil);
    if SvcHandle > 0 then begin

      //Flag setzen
      bCreated := True;

      //Handle freigeben
      CloseServiceHandle(SvcHandle);
    end;{if}

    //Handle freigeben
    CloseServiceHandle(SCManHandle);
  end;{if}

  //Ergebnis
  result := bCreated;

end;{InstallService}

//Aufruf der Funktion
InstallService('', 'SvcMain', 'Mein Beispiel Service', 'C:\Temp\Service.exe');
Also irgendwo scheint es einen Unterschied zwischen meiner Funktion und der Kommandozeilen Variante mit "Service.exe /INSTALL" zu geben.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Service aus Anwendung installieren

  Alt 1. Okt 2013, 20:29
Der Unterschied ist, dass der Aufruf von /install dein Programm startet, das dann selbst CreateService benutzt und auch die Events ausführt.
Wenn du nur CreateService benutzt, wird dein Dienst gar nicht erst dabei gestartet und daher kann dort auch kein Event ausgeführt werden.

Sprich:
Aufruf mit /install und /uninstall ist (allgemein) schon die beste Variante, da nur der Dienst selbst weiß was bei der Installation alles passieren muss. Das Starten und Stoppen hingegen kann man gut per API erledigen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  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 12:27 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