Einzelnen Beitrag anzeigen

TUX_der_Pinguin

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

Service aus Anwendung installieren

  Alt 1. Okt 2013, 15: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