![]() |
Neustart der Applikation aus Stabilitätsgründen...
Hallo zusammen,
ich entwickle momentan eine Applikation, welche im Dauerbetrieb stabil laufen muss. Weiterhin sind ein helles und ein dunkles Design gefordert. Da es nach dem Umschalten des Styles immer wieder zu Fehler in der VCL kommt habe ich mich für einen etwas unkonventionellen Weg entschieden. Nachdem der Benutzer das Design ändert (sollte eigentlich nicht oft vorkommen) starte ich die Applikation neu. Dazu habe ich im Hauptformular folgenden Destructor geschrieben:
Delphi-Quellcode:
Bei der Konfiguration löse ich das ganze nach einer Sicherheitsabfrage wie folgt aus:
destructor TfrmMain.Destroy;
var AppName, AppParam: string; begin inherited; if SkinChangeRestart then begin AppName := ParamStr(0); AppParam := SKIN_RESTART_PARAM; ShellExecute(0, nil, PChar(AppName), PChar(AppParam), nil, SW_SHOW); end; end;
Delphi-Quellcode:
Das funktioniert, aber ich bin mir nicht sicher, ob das der richtige Weg ist oder ob man das anders lösen sollte.SkinChangeRestart := True; Application.MainForm.Close; Ehe ein Hinweis auf "löse das VCL Problem" kommt: Ich habe ja bereits einen häufig auftretenden Fehler gemeldet (RSP-38928). Ich werde bei Gelegenheit noch einen weiteren Melden der immer wieder auftritt. Mit dem Debuggen solcher Fehler bin ich überfordert bzw. dazu fehlt mir die Zeit. Das die Anwendung in Forms dynamisch erzeugte eingebettete forms und frames enthält macht das ganze nicht leichter. Aber ehe das nicht alles seitens VCL stabil ist brauche ich eine Lösung. Die vorliegende Anwendung wird z.B. ab Oktober in Mexiko und später noch in Brasilien und den USA laufen. Da kann ich nicht mal eben hinfahren... |
AW: Neustart der Applikation aus Stabilitätsgründen...
Ich empfehle von Herrn Below die OneInstance unit (einfach mal hier danach suchen) zu benutzen. Läuft bei mir seit Jahren perfekt!
|
AW: Neustart der Applikation aus Stabilitätsgründen...
Zitat:
|
AW: Neustart der Applikation aus Stabilitätsgründen...
Und genau dafür nutze ich seine Unit, naja wie dem auch sei...
|
AW: Neustart der Applikation aus Stabilitätsgründen...
Reicht es denn nicht die Form neu zu erstellen (wobei es bei der MainForm nicht so einfach ist, das deren Freigabe standardmäßig die Anwendung beendet)
oder zumindestens die Windows-Handles/Controls neu zu generieren? |
AW: Neustart der Applikation aus Stabilitätsgründen...
Zitat:
Das Problem mit den Styles ist halt, dass manchmal Fehler direkt beim Umschalten stattfinden und manchmal erst später, wenn Frames neu aufgemacht / erzeugt werden. Meistens funktioniert es aber. Und das macht mir Bauchschmerzen. Ich hasse Fehler, die nicht reproduzierbar sind. |
AW: Neustart der Applikation aus Stabilitätsgründen...
Zitat:
sondern darum die Anwendung neu zu starten. Dafür braucht man keine extra Unit eine Zeile reicht vollkommen aus. Ich mache es beim Skin Wechsel auf diese weise.
Delphi-Quellcode:
bzw. Dein Variante sollte es auch tun. Sehe da kein Problem.
if Restart then
Result := ShellExecute(0, 'open', PWideChar(ParamStr(0)), nil, nil, SW_SHOW) |
AW: Neustart der Applikation aus Stabilitätsgründen...
offtopic
Nur um das was ich meinte zu vervollständigen, ich nutze diese nicht-gewollte unit weil diese halt möglichkeiten bietet beim zweit-aufruf schon im code die alte instanz zu schließen, neue zu starten, automatisierte aktionen ausführt etc. Klar kann man das auch alles selbst schreiben, muss man aber nicht, war halt nur ein vorschlag. habs nicht bös gemeint. |
AW: Neustart der Applikation aus Stabilitätsgründen...
Delphi-Quellcode:
Self.RecreateWnd;
Zitat:
Bei dir nicht. Grund siehe ![]() PS: Wenn man die Anwendung inkl. der ursprünglichen Parameter neu starten will, dann siehe ![]() |
AW: Neustart der Applikation aus Stabilitätsgründen...
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 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