Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Service-Installation fehlgeschlagen. Woher soll ich das wissen? (https://www.delphipraxis.net/192954-service-installation-fehlgeschlagen-woher-soll-ich-das-wissen.html)

Der schöne Günther 6. Jun 2017 09:34

Delphi-Version: 10 Seattle

Service-Installation fehlgeschlagen. Woher soll ich das wissen?
 
Ich habe mit Delphi einen kleinen Windows-Dienst geschrieben. Der ist Teil einer Installations-Routine. Um den Dienst zu installieren rufe ich ihn mit den Argumenten
Delphi-Quellcode:
/Install /Silent
auf.

Kommt es hierbei zu irgendeinem Problem, wirft das Ding (trotz /Silent) eine Messagebox auf den Bildschirm. Der Exitcode des Prozesses ist trotzdem Null- Das übergeordnete Setup kann überhaupt nicht wissen dass das Setup fehlschlug. Wie komme ich hier raus?

himitsu 6. Jun 2017 10:06

AW: Service-Installation fehlgeschlagen. Woher soll ich das wissen?
 
Was für eine MessageBox, bzw. welche Fehlermeldung?
Strg+C funktioniert in Dialogen und dann hier Strg+V als Text rein. :angle:

Und ja, Delphis TService setzt den ExitCode nicht ... das muß du leider selber machen, wenn er nötig ist.
Delphi-Quellcode:
System.ExitCode:=X;
bzw
Delphi-Quellcode:
Halt(X);

Der schöne Günther 6. Jun 2017 10:35

AW: Service-Installation fehlgeschlagen. Woher soll ich das wissen?
 
Es ist die Messagebox aus Vcl.SvcMgr.pas ->
Delphi-Quellcode:
TServiceApplication.RegisterServices(Bool, Bool)
Zitat:

[Window Title]
Error

[Content]
Service "Günther-Service" failed to install with error: "System Error. Code: 1073.
Der angegebene Dienst ist bereits vorhanden"

[OK]
Das ist ein Beispiel. Fehlschlagen kann die Installation ja aus vielerlei Gründen.

Ich kann keinen Exitcode setzen denn mein "User Code" wird ja noch nicht einmal ausgeführt. Es ist der Automatismus den die Delphi-RTL fest einkodiert zum Installieren des Dienstes anbietet, ich sehe keinen Weg wie ich mich da irgendwo dazwischen hängen kann. Der Prozess wirft eine Messagebox auf den Bildschirm und wartet bis ich die weg klicke. ExitCode ist null.

Daniel 6. Jun 2017 10:37

AW: Service-Installation fehlgeschlagen. Woher soll ich das wissen?
 
Wenn Du die volle Kontrolle haben möchtest, wirst Du den Service selbst installieren müssen. Die entsprechenden APIs sind recht einfach und mit Google sind aktuelle Delphi-Units, die die Aufrufe kapseln, leicht zu finden.
Ich hatte das seinerzeit in ein Inno-Setup integriert, natürlich lässt sich das auch auf jeden anderen Installer anpassen.

himitsu 6. Jun 2017 11:30

AW: Service-Installation fehlgeschlagen. Woher soll ich das wissen?
 
Bei unserem Service setze ich in den Fehler-Events der TService/TApplication den ExitCode.
Und das Registrieren mußte ich leider auch etwas überschreiben, da man in Delphis TService keinen Startparameter für seinen Service mitgeben kann. (unser Service wird bei einigen Kunden mehrmals installiert ... früher mußte er dafür in getrennten Verteichnissen liegen und jetzt bekommt das EINE Installationsverzeichnis per Parameter mit welcher Service grade gestartet wurde)

Stevie 6. Jun 2017 11:45

AW: Service-Installation fehlgeschlagen. Woher soll ich das wissen?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1373537)
Das ist ein Beispiel. Fehlschlagen kann die Installation ja aus vielerlei Gründen.

Ich würd ja mal alle möglichen Gründe zusammentragen und dann einfach vorher überprüfen, dass diese nicht vorhanden sind.
Zum Beispiel kannst du dann das Setup verweigern wenn der Dienst schon vorhandem ist oder anbieten, ihn vorher zu entfernen.
Wird bei den anderen Gründen ähnlich sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 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