![]() |
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. |
AW: Gleichen Dienst mehrfach installieren -> Name?
Zitat:
|
AW: Gleichen Dienst mehrfach installieren -> Name?
Wozu würde man einen Dienst mehrfach installieren wollen? Sieht nach Designfehler aus.
|
AW: Gleichen Dienst mehrfach installieren -> Name?
Zitat:
Es gibt dafür durchaus gute Einsatzgründe für diese Named Services. |
AW: Gleichen Dienst mehrfach installieren -> Name?
Ich habe SQL Server, Webserver usw. mal stillschweigend ausgeklammert da ich nicht davon ausgegangen bin dass der Ersteller bezüglich Anforderungen an Anzahl Threads, Clientverbindungen usw. die Frage nach einer Mehrfachinstallation gestellt hat. Wir haben hier auch schon einige Multitier Anwendungen geschrieben mit tausenden von Clients auf einen Serverdienst und standen noch nie vor dem Problem. Aber vermutlich gibt es ja andere Gründe dafür. Deshalb auch meine Eingangsfrage gefolgt von der zugegeben provokativen Bemerkung von wegen Designfehler.
|
AW: Gleichen Dienst mehrfach installieren -> Name?
Zitat:
Theoretisch könnte man so etwas mit mehr Aufwand auch in eine einzelne Exe packen, aber das erweist sich in der Praxis oft als nicht sinnvoll. // EDIT: Ist der Tab schon so lange offen? O.O |
AW: Gleichen Dienst mehrfach installieren -> Name?
Der 32-Bit Service ist bissl klein, da klappt es nicht, daß er sich bei uns gleichzeitig um zwei/mehr Datenbanken/Dateimanagements kümmert.
Und zusätlich, wenn einer abraucht, dann läuft der Andere weiter. Bisher hatten wir das über mehrere Installationspfade geregelt, aber das ist bei Updates einfach nur unschön und fehleranfällig (da vergisst man schnell mal Einen upzugraden). Zitat:
Oder Firma ging pleite und fängt neu. Da macht man einen radikalen Schnitt und setzt eine neue Umgegbung für die neue Firma auf, vorallem da für die Buchhaltung, den Insolvenzverwalter usw. alte und neue Firma getrennt sein müssen und schwupps, so hat man alles doppelt, bis die alte Firma komplett abgewickelt ist. Oder eben mehrere Filialen/Abteilungen, die in sich aber getrennt sind. |
AW: Gleichen Dienst mehrfach installieren -> Name?
Um ein bisschen mehr Licht in's Dunkel zu bringen:
Es handelt sich dabei um einen Dienst, der seriell angeschlossenen Grosswaagen ausliest, und die Gewichte und Waagenbenutzer in eine Datenbank schreibt. Weiterhin wird der Waagencontroller (Fremdfabrikat) aus der DB mit bestimmten Daten versorgt. Natürlich hätte man das ganze jetzt auch mal locker in einen Dienst über mehrere Threads packen können, was ich auch in der 1. Lösung so realisiert hatte. Nun ist es aber so, dass bei der Kommunikation zu den Waagen manches mal Probleme auftreten können (Anschluss erfolgt über virtuelle Com-Schnistelle<->TCP<->IP-Seriell-Interface) und auch die Waagencontroller kommen gerne mal aus dem Tritt (was aber Gott sei Dank nicht soo häufig auftritt). Weiterhin sind die Waagen teilweise auch noch über verschiedene Server angeschlossen, und nicht alle immer gleichzeitig in Betrieb. Kurz und gut, um also von vorneherein das ganze sauber von einander zu trennen und um zu vermeiden, dass eine Fehlfunktion einer Waage im schlimmsten Fall andere Waagen in der Kommunikation stört, habe ich mich dafür entschieden, je Waage ein Dienst. Mal abgesehen davon ist es für den Kunden später einfacher, einen bestimmten Dienst neuzustarten, ohne dabei die anderen Wiegevorgänge zu beeinträchtigen. Das kann man als Designfehler bezeichnen....muss man aber nicht. Für jedes Problem gibt es verschiedene Lösungsansätze, und je nach Überlegungen und Schwerpunkte kann man auch verschiedene Lösungen favorisieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 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