![]() |
Service aus Anwendung installieren
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 stoppen und deinstallieren
Service.exe /INSTALL
net start Service
Code:
Jetzt soll das ein kleines Tool machen, das klappt soweit auch alles nur habe ich gerade gemerkt das
net stop Service
Service.exe /UNINSTALL 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:
Also irgendwo scheint es einen Unterschied zwischen meiner Funktion und der Kommandozeilen Variante mit "Service.exe /INSTALL" zu geben.
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'); |
AW: Service aus Anwendung installieren
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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