![]() |
Gleichen Dienst mehrfach installieren -> Name?
Hi,
ich will einen Dienst mehrfach auf dem gleichen Rechner installieren. Nun gibt es je TService.Displayname und TService.Name, die ich während der Entwicklung festlege, und die ja bei der Installation als Anzeigename und Dienstname einträgt, was natürlich schlecht ist. Jetzt könnte man ja die Installation mit einem zusätzlichen Parameter aufrufen, der dann den Dienstnamen und den Anzeigename für den jeweiligen Dienst anpasst. Muss aber dann der Dienst diese Informationen (Dienstname und Anzeigename) beim Starten auch jedes mal haben, damit er gestartet werden kann? Ich nehme mal an ja. Dann müsste man ja nach der Installation in die Dienste gehen und den Aufruf manuell anpassen, oder trägt er das selber gleich mit ein? Und welchen Einfluss hat das Ändern von TService.Name auf den Ablauf des Services? |
AW: Gleichen Dienst mehrfach installieren -> Name?
Der Dienst selber braucht den Namen nicht zum Starten, der ServiceController benötigt den schon, sonst weiß er nicht, welchen er starten soll
|
AW: Gleichen Dienst mehrfach installieren -> Name?
ja, aber ist es wichtig den Namen später nach der Installation auch jedes Mal auf den gleichen zu setzen den man während der Installation verwendet hat, oder ist das dann egal?
[Edit] hab grad deine Antwort nochmal gelesen. Also muss ich das so verstehen, dass er den gleichen Namen doch jedesmal benötigt. Aber wie macht man das am geschicktesten? Über einen Startparameter? |
AW: Gleichen Dienst mehrfach installieren -> Name?
Lösungen, denn Delphi-Services sind da echt besch* implementiert: (vieles ist hartgecodet und lässt sich nicht anpassen)
Alternative Lösung: Die Service-Implementation von Fremdanbietern (gibt es bestimmt irgendwo etwas ... man kann es ja fast nur noch besser machen) |
AW: Gleichen Dienst mehrfach installieren -> Name?
Zitat:
Die zweite Lösung gefällt mir aber noch besser, da ich dann nicht abhängig von irgendwelchen Inidateien bin. Eigentlich schade, dass das so unglücklich gelöst ist, aber solange es einen Workaround gibt. Sind ja nur ein paar Zeilen Code. Noch eine andere Frage: Gibt es eigentlich irgendeine Beschränkung bezüglich der Länge der Parameter? Ich würde nämlich gerne eine GUID verwenden. |
AW: Gleichen Dienst mehrfach installieren -> Name?
Hier mal einen Service, den du mit mehreren Namen installieren kannst
Delphi-Quellcode:
Installieren mit
unit Service.Main;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs; type TServiceName = class( TService ) procedure ServiceCreate( Sender: TObject ); procedure ServiceAfterInstall( Sender: TService ); private FName: string; public function GetServiceController: TServiceController; override; {Public-Deklarationen} end; var ServiceName: TServiceName; implementation {$R *.dfm} uses System.Win.Registry; procedure ServiceController( CtrlCode: DWord ); stdcall; begin ServiceName.Controller( CtrlCode ); end; function TServiceName.GetServiceController: TServiceController; begin Result := ServiceController; end; procedure TServiceName.ServiceAfterInstall( Sender: TService ); var reg: TRegistry; begin if FName <> '' then begin reg := TRegistry.Create; try reg.RootKey := HKEY_LOCAL_MACHINE; if reg.OpenKey( 'SYSTEM\CurrentControlSet\Services\' + Self.Name, True ) then begin reg.WriteExpandString( 'ImagePath', ParamStr( 0 ) + ' -name ' + FName ); reg.CloseKey; end; finally reg.Free; end; end; end; procedure TServiceName.ServiceCreate( Sender: TObject ); begin if FindCmdLineSwitch( 'name', FName ) and (FName <> '') then begin Self.DisplayName := Self.DisplayName + '(' + FName + ')'; Self.Name := Self.Name + '_' + FName; end; end; end.
Code:
und deinstallieren eben analog mit
myservice.exe -install [-name <service-name-addon>]
Code:
PS Das Verwenden von MagicValues möge man mir hier nachsehen und bitte selber korrigieren :)
myservice.exe -uninstall [-name <service-name-addon>]
|
AW: Gleichen Dienst mehrfach installieren -> Name?
Es wurde noch nicht gesagt, daher eine Ergänzung von mir: Wichtig ist, dass der Dienstname eindeutig ist, denn anhand desselben arbeitet der Service Control Manager (SCM). Der Display Name kann identisch sein, weil dieser nur der Anzeige dient.
MfG Dalai |
AW: Gleichen Dienst mehrfach installieren -> Name?
Zitat:
|
AW: Gleichen Dienst mehrfach installieren -> Name?
Zitat:
Zitat:
Irgendwie sinnfrei, sowohl Service Name als auch Display Name als Identifikationsmerkmal zu benutzen. Naja, MS wird seine Gründe haben, auch wenn diese nicht ersichtlich sind. Vorteil davon ist aber, dass man bei net start/stop auf einer CMD auch den Display Name benutzen kann, ohne den Dienstnamen kennen zu müssen (der zumindest mir oft nicht einfällt). MfG Dalai |
AW: Gleichen Dienst mehrfach installieren -> Name?
Die Hilfe von
Delphi-Quellcode:
meint, daß man ihm den Dienstnamen geben soll, aber wenn man sich die vorgeschlagenen Namen ansieht, dann erkennt man, daß der den Displaynamen meint.
net start ...
Wenn ich es richtig in Erinnerung hab, dann nimmt der Beides an und demnach erklärt sich auch, warum beide Namen (Name und DisplayName) jeweils eindeutig sein müssen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23: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