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.