AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Neustart der Applikation aus Stabilitätsgründen...
Thema durchsuchen
Ansicht
Themen-Optionen

Neustart der Applikation aus Stabilitätsgründen...

Ein Thema von BigAl · begonnen am 28. Aug 2022 · letzter Beitrag vom 29. Aug 2022
Antwort Antwort
Seite 1 von 3  1 23      
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#1

Neustart der Applikation aus Stabilitätsgründen...

  Alt 28. Aug 2022, 18:43
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:
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;
Bei der Konfiguration löse ich das ganze nach einer Sicherheitsabfrage wie folgt aus:

Delphi-Quellcode:
          
  SkinChangeRestart := True;
  Application.MainForm.Close;
Das funktioniert, aber ich bin mir nicht sicher, ob das der richtige Weg ist oder ob man das anders lösen sollte.

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...
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Neustart der Applikation aus Stabilitätsgründen...

  Alt 28. Aug 2022, 19:06
Ich empfehle von Herrn Below die OneInstance unit (einfach mal hier danach suchen) zu benutzen. Läuft bei mir seit Jahren perfekt!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#3

AW: Neustart der Applikation aus Stabilitätsgründen...

  Alt 28. Aug 2022, 19:19
Ich empfehle von Herrn Below die OneInstance unit (einfach mal hier danach suchen) zu benutzen. Läuft bei mir seit Jahren perfekt!
Und wie soll die bei meinem Problem helfen? Um eine Instanz sicherzustellen brauchts keine Unit. Das ist mit ein paar Codezeilen erledigt. Mir geht es darum die aktuelle Instanz zu beenden und dann automatisch eine neue zu starten...
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Neustart der Applikation aus Stabilitätsgründen...

  Alt 28. Aug 2022, 19:52
Und genau dafür nutze ich seine Unit, naja wie dem auch sei...
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#5

AW: Neustart der Applikation aus Stabilitätsgründen...

  Alt 28. Aug 2022, 22:53
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#6

AW: Neustart der Applikation aus Stabilitätsgründen...

  Alt 28. Aug 2022, 23:04
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?
Das Problem ist, dass in der Main-Form jede Menge Initialisierung stattfindet. Ok. Die könnte man aus dem constructor / destructor auslagern. Hmm. Die Idee ist nicht schlecht. Wobei beim Umschalten des Styles eh der Handle des Hauptformulars neu erzeugt wird - spricht das Fenster des Hauptformulars vom StyleManager wohl neu erzeugt wird. Dann müsste die aktuelle Sub-Forms restauriert werden usw. Muss ich mir mal anschauen. Weiterhin müsste man wahrscheinlich "Application" austricksen. Und da wird's tricky.

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.
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

AW: Neustart der Applikation aus Stabilitätsgründen...

  Alt 28. Aug 2022, 23:06
Zitat:
Und genau dafür nutze ich seine Unit, naja wie dem auch sei...
Es geht hier nicht um eine Instance also sicherstellen das nur eine erlaubt ist
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:
if Restart then
  Result := ShellExecute(0, 'open', PWideChar(ParamStr(0)), nil, nil, SW_SHOW)
bzw. Dein Variante sollte es auch tun. Sehe da kein Problem.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Neustart der Applikation aus Stabilitätsgründen...

  Alt 28. Aug 2022, 23:21
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#9

AW: Neustart der Applikation aus Stabilitätsgründen...

  Alt 29. Aug 2022, 00:43
Self.RecreateWnd;

Delphi-Quellcode:
if Restart then
  Result := ShellExecute(0, 'open', PWideChar(ParamStr(0)), nil, nil, SW_SHOW)
Im ersten Post war es bereits richig (nur zusätzlich noch mit einem Parameter)
Bei dir nicht. Grund siehe https://www.delphipraxis.net/211304-...ml#post1510883

PS: Wenn man die Anwendung inkl. der ursprünglichen Parameter neu starten will, dann siehe MSDN-Library durchsuchenGetCommandLine. (einfacher als die vielen ParamStr's wieder neu zusammenzusetzen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Aug 2022 um 00:53 Uhr)
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#10

AW: Neustart der Applikation aus Stabilitätsgründen...

  Alt 29. Aug 2022, 05:42
Zitat:
PS: Wenn man die Anwendung inkl. der ursprünglichen Parameter neu starten will, dann siehe MSDN-Library durchsuchenGetCommandLine. (einfacher als die vielen ParamStr's wieder neu zusammenzusetzen)
Der Parameter sagt der Anwendung lediglich, dass der Restart auf Grund des Skin-Wechsels erfolgt. Damit navigiere sie dann wieder direkt an die Stelle, auf der das ganze ausgelöst wurde und schaltet die zum Einstellen benötigten Rechte frei. Das ganze ist eine Oberfläche für das UI einer Industrieanlage, welches zu 100% Touch-gesteuert ist. Es gibt also keine Tastatur. Es ist also ausgeschlossen, dass der Benutzer da Schindluder treibt mit dem Parameter (es gibt keine Tastatur)...
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 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