Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Dienst zweimal auf dem gleichen Rechner starten (https://www.delphipraxis.net/118146-dienst-zweimal-auf-dem-gleichen-rechner-starten.html)

DelphiKlaus 1. Aug 2008 11:48


Dienst zweimal auf dem gleichen Rechner starten
 
Hallo,

ich habe das Problem, das ein von mir unter Delphi 6 erstellter Dienst zweimal auf dem gleichen Rechner (Windows 2003) gestartet werden soll. Einmal läuft die Anwendung in der echten Produktionsumgebung und ein zweitesmal soll der Dienst als Testinstanz laufen. Ich dachte, dass man mit Hilfe des Servicenamens oder Servicedisplaynamens, in der BeforeInstall-Routine aus einer Ini-Datei gelesen und damit für die beiden Programminstanzen unterschiedlich gemacht, das Problem leicht lösen könnte.

Aber das war wohl nichts. Sobald ich die Eigenschaft 'name' des Dienstes in einen anderen Namen ändere als den, der im Objektinspektor steht, geht nichts mehr. Der Dienst läßt sich zwar installieren, aber weder starten noch wieder deinstallieren. Die Änderung des displaynamens alleine bringt auch nichts, da es wohl wirklich nur der angezeigte Name ist. Die Eigenschaft servicestartname bringt's auch nicht, da da ja die Domäne und der User angegeben werden.

Ich könnte natürlich Teile des Quellcodes doppeln, also insbesondere die Unit, in der der von TService abgeleitete Dienst deklariert ist. Den Weg find ich nicht besonders schön, da in der Testinstanz normalerweise Programmänderungen getestet und abgenommen werden, und dann die gleiche Exe-Datei in der Produktionsumgebung aktiviert wird.

Gibts hier vielleicht jemanden, der so ein Problem schon mal hatte und mir einen guten Tipp geben kann.

Viele Grüße

Klaus

OregonGhost 1. Aug 2008 12:53

Re: Dienst zweimal auf dem gleichen Rechner starten
 
Ich habe mal eine Lösung gesehen, wo man mehrere Instanzen eines Dienstes laufen lassen konnte, die man einzeln kaufen konnte (also Lizenz pro Dienstinstanz). Vor diesem Hintergrund wurden einfach mehrere EXE-Dateien erzeugt, jede mit eigenem Namen und eigenem Service-Namen. Vielleicht ist das ein Modell, das für dich interessant ist, besonders wenn es dabei um den Unterschied zwischen Test- und Produktionsinstanz geht?

Bernhard Geyer 1. Aug 2008 13:34

Re: Dienst zweimal auf dem gleichen Rechner starten
 
Ich denke mit der Codegear TServer-Wrapper-Klasse geht das nicht. Dort ist Dienstname mit Klassenname verwoben. Hier müsstest du also eine eigene Ableitung machen.

Wenn die Anwendung als Testinstallation laufen soll (und wirklich keine extra HW dafür angeschaft werden kann). VM-Ware Server (Oder Virtualisierungslösung nach eigenen Wünschen) installiert und in einer VM-Ware die Testinstallation laufen lassen.

SirThornberry 1. Aug 2008 14:13

Re: Dienst zweimal auf dem gleichen Rechner starten
 
eine sehr einfache Lösung wäre einen Dienst zu schreiben der nicht die eigentliche Arbeit macht sondern einfach weitere Prozesse startet.

OregonGhost 1. Aug 2008 14:22

Re: Dienst zweimal auf dem gleichen Rechner starten
 
Ach ja, das vergaß ich in meinem Beitrag oben zu erwähnen. Bei dieser Lösung gab es zwar viele EXE-Dateien, aber das eigentliche Programm war in einer DLL untergebracht, die von der jeweiligen EXE geladen wurde. Also wenig Overhead im Endeffekt.

Union 2. Aug 2008 12:38

Re: Dienst zweimal auf dem gleichen Rechner starten
 
Du kannst Dir das ServiceManager-Grundgerüst selber programmieren und dann die Service-Installation parametrisierbar machen:
Code:
c:\> MyService /i /n:YourService
Würde dann den MyService.Exe als Dienstname YourService registrieren. Beim Uninstall müsste dann natürlich der gleiche Servicename angegeben werden ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz