Damit das hier kein Sinnlos-Thread ist, teile ich meine Erkenntnisse mit der
DP-Community.
Also alles klappt nun, nach folgenden Änderungen:
1. Ein normaler Named
Mutex ist auf Sessions begrenzt, dh., dass man einen Globalen
Mutex setzen muss, wenn der Dienst den
Mutex von einer "normalen" Anwendung sehen soll und umgekehrt. Das funktioniert mit der Namensprefix "Global\".
Delphi-Quellcode:
CreateMutex(nil,false,'Global\Beispielmutex');
;
2. Wenn man einen Globalen
Mutex "abfragen" möchte und er breits existiert, bekommt man NICHT über GetLastError den Fehler ERROR_ALREADY_EXISTS, aber das zurückgegebene Mutexhandle ist = 0(invalid).
Dh. dass man sollte immer beides abfragen.
Delphi-Quellcode:
hMutex:=CreateMutex(nil, false, 'Global\Beispielmutex');
if (hMutex = INVALID_HANDLE) or(GetLastError = ERROR_ALREADY_EXISTS) then ...
Wichtig ist auch,
Mutex wieder Freigeben über:
Delphi-Quellcode:
ReleaseMutex(hMutex);
CloseHandle(hMutex);
Wenn man statt ein
Mutex lieber Startparameter verwendende möchte (wie himitsu vorgeschlagen hat), kann man diese bei folgender Funktion angeben.
Delphi-Quellcode:
CreateService( SCM,
PWideChar('TCTRL6S01'),
PWideChar('TCTRL6Service'),
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
'C:\BeispielService.exe Parameter1 Parameter2', //usw
nil,
nil,
nil,
nil,
nil);
Nachteil: Durch die Eigenwahl des Anzeigenamens, bzw des Servicenamens ist eine Deinstallation über "C:\BeispielService.exe -uninstall" nicht mehr möglich. (logischerweise)
Abhilfe siehe:
Delphi-Quellcode:
OpenService();
DeleteService();
Ein Per-Hand-Installieren wird aber dem entsprechend schwierig, weil der von Delphi "vorkonstuierte" tService beim Installieren keine Parameter einfügt. Folglich hat man 2 Möglichkeiten: Entweder eine eigene Klasse von tService ableiten und die Installationsroutine anpassen, oder in der Registry bestimmte Einträge abändern.
Zum Abschluss noch ein Kommentar:
DP ist genial. Ich profitiere immer wieder von den Threads.
Es wäre aber genial, wenn der letzte Post die wichtigsten für das Thema relevanten Erkenntnisse aufführt.
(so wie dieser
)
Ahoi c20c