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 2 von 3     12 3      
Maliko

Registriert seit: 20. Jun 2019
91 Beiträge
 
Delphi 10.3 Rio
 
#11

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

  Alt 29. Aug 2022, 08:52
Es ist also ausgeschlossen, dass der Benutzer da Schindluder treibt mit dem Parameter (es gibt keine Tastatur)...
Ausgeschlossen ist das gar nicht mal. Wenn im Hintergrund ein Windows läuft und man die Anwendung schließen kann, bzw. die Startleiste von Windows zu sehen ist, dann aktiviert man einfach die Bildschirmtastatur und schon kann man "Schindluder" treiben.
  Mit Zitat antworten Zitat
BigAl

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

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

  Alt 29. Aug 2022, 09:19
Es ist also ausgeschlossen, dass der Benutzer da Schindluder treibt mit dem Parameter (es gibt keine Tastatur)...
Ausgeschlossen ist das gar nicht mal. Wenn im Hintergrund ein Windows läuft und man die Anwendung schließen kann, bzw. die Startleiste von Windows zu sehen ist, dann aktiviert man einfach die Bildschirmtastatur und schon kann man "Schindluder" treiben.
Anwendung schließen geht nur mit Admin. Taskleiste ist nicht sichtbar:
Delphi-Quellcode:
    WindowState := TWindowState.wsMaximized;
    BorderStyle := bsNone;
    BoundsRect := Screen.MonitorFromWindow(Handle).BoundsRect;
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
 
#13

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

  Alt 29. Aug 2022, 11:25
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)
Es gibt viele Wege nach Köln.

Teste es doch einfach dann wirst du sehen das es das tut was es soll.
Ohne nennenswerte Problem im Bruchteil einer Millisekunde.
Es ist so schnell das es gar nicht ins Gewicht fällt oder man es merkt das die Anwendung neu gestartet wird.

Wichtig ist das Ergebnis nicht die art und weise wie dieses erreicht wird.

Geändert von venice2 (29. Aug 2022 um 11:31 Uhr)
  Mit Zitat antworten Zitat
BigAl

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

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

  Alt 29. Aug 2022, 11:33
Es gibt viele Wege nach Köln.

Teste es doch einfach dann wirst du sehen das es das tut was es soll.
Ohne nennenswerte Problem im Bruchteil einer Millisekunde.
Es ist so schnell das es gar nicht ins Gewicht fällt oder man es merkt das die Anwendung neu gestartet wird.
Kommt natürlich darauf an wie viel Initialisierung stattfindet. Aber ja. Geht sehr schnell.

Ich hatte eigentlich eher bedenken wann ich den Neustart durchführe. In meinem ersten Post mache ich das ja im destructor der Main. Alternativ könnte ich das ja auch hinter das "Application.Run" setzen (was ich nun auch gemacht habe...). Das ist dann der letztmöglich Zeitpunkt.
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)

Geändert von BigAl (29. Aug 2022 um 11:36 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#15

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

  Alt 29. Aug 2022, 11:43
Es gibt viele Wege nach Köln.

Teste es doch einfach dann wirst du sehen das es das tut was es soll.
Ohne nennenswerte Problem im Bruchteil einer Millisekunde.
Es ist so schnell das es gar nicht ins Gewicht fällt oder man es merkt das die Anwendung neu gestartet wird.
Kommt natürlich darauf an wie viel Initialisierung stattfindet. Aber ja. Geht sehr schnell.

Ich hatte eigentlich eher bedenken wann ich den Neustart durchführe. In meinem ersten Post mache ich das ja im destructor der Main. Alternativ könnte ich das ja auch hinter das "Application.Run" setzen. Das wäre dann der letztmöglich Zeitpunkt...
Jo!
Ich arbeite ja ohne die VCL mit eigener Skinengine von daher habe ich wohl nicht so immense Initialisierung wie du.
Ich schicke beim ändern des Skin aus meinen Menu
Delphi-Quellcode:
                
PostQuitMessage(0);
Restart := TRUE;
und fertig.
Letztendlich zählt das Ergebnis.
  Mit Zitat antworten Zitat
BigAl

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

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

  Alt 29. Aug 2022, 11:49
Ich arbeite ja ohne die VCL mit eigener Skinengine von daher habe ich wohl nicht so immense Initialisierung wie du.
Ich schicke beim ändern des Skin aus meinen Menu
Delphi-Quellcode:
                
PostQuitMessage(0);
Restart := TRUE;
und fertig.
Letztendlich zählt das Ergebnis.
Mit anderer Engine hatte ich überlegt. Habe hier eine ein lifetime "almdev" Lizenz. Aber ich denke das sicherste für die Zukunft sind immer noch die Bibliotheken von Emba. Zu viele Firmen haben sich über die Jahre vom Markt verabschiedet.

Und ja: Letztendlich zählt das Ergebnis. Das Forum hilft halt bei der Meinungsfindung .
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 Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#17

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

  Alt 29. Aug 2022, 14:08
Alternativ könnte ich das ja auch hinter das "Application.Run" setzen (was ich nun auch gemacht habe...). Das ist dann der letztmöglich Zeitpunkt.
Die finalization Abschnitte der Units werden noch später ausgeführt. Den spätesten Zeitpunkt den du damit noch erreichen könntest, wäre das finalization einer minimalen Unit, die im Projekt als erstes in der Uses-Anweisung steht.

Zu dem Zeitpunkt sind auch alle Forms und sonstige Komponenten der Anwendung freigegeben, was direkt nach dem Run in der Regel noch nicht der Fall ist.

So eine Unit könnte in etwa so aussehen:
Delphi-Quellcode:
unit AutoRestartUnit;

interface

var
  AutoRestart: Boolean = False;
  AutoRestartCmdLine: PChar;

implementation

uses
  Winapi.ShellAPI, Winapi.Windows;

initialization
  AutoRestartCmdLine := CmdLine;
finalization
  if AutoRestart then begin
    ShellExecute(0, 'open', PChar(ParamStr(0)), AutoRestartCmdLine, nil, SW_SHOW);
  end;
end.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 29. Aug 2022, 14:25
Teste es doch einfach dann wirst du sehen das es das tut was es soll.

Wichtig ist das Ergebnis nicht die art und weise wie dieses erreicht wird.
Ja, es mag gehen, es ist denoch falsch.

Du kannst einen kleinen Nagel auch mit einer Zange ins Holz hauen, also geht es sozusagen, aber dennoch ist es nicht richtig.


Und genau weil zuviele so denken knallt es gern mal, sobald sich mal ein bissl was ändert.



Ja, PChar entspricht aktuell PWideChar und das wird sich so schnell nicht nochmal ändern,
aber da hört es nicht auf.
* Integer anstatt LPARAM/WPARAM/LRESULT als Typen SendMessage/PostMessage
* Interger als Cast für einen Pointer
* ...
$2B or not $2B

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

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

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

  Alt 29. Aug 2022, 14:50
Alternativ könnte ich das ja auch hinter das "Application.Run" setzen (was ich nun auch gemacht habe...). Das ist dann der letztmöglich Zeitpunkt.
Die finalization Abschnitte der Units werden noch später ausgeführt. Den spätesten Zeitpunkt den du damit noch erreichen könntest, wäre das finalization einer minimalen Unit, die im Projekt als erstes in der Uses-Anweisung steht.

Zu dem Zeitpunkt sind auch alle Forms und sonstige Komponenten der Anwendung freigegeben, was direkt nach dem Run in der Regel noch nicht der Fall ist.

So eine Unit könnte in etwa so aussehen:
Delphi-Quellcode:
unit AutoRestartUnit;

interface

var
  AutoRestart: Boolean = False;
  AutoRestartCmdLine: PChar;

implementation

uses
  Winapi.ShellAPI, Winapi.Windows;

initialization
  AutoRestartCmdLine := CmdLine;
finalization
  if AutoRestart then begin
    ShellExecute(0, 'open', PChar(ParamStr(0)), AutoRestartCmdLine, nil, SW_SHOW);
  end;
end.
Da hast Du natürlich recht. Wobei ich mich schwer tue die "uses" des Projekts manuell zu bearbeiten. Bleibt meine Unit dann auch oben? Üblicherweise pflegt doch die IDE diese "uses"-Liste...
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 himitsu
himitsu

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

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

  Alt 29. Aug 2022, 15:31
Delphi hängt Units nur an, wenn es der Meinung ist, etwas würde fehlen.
Was drin war, bleibt erhalten.

Ausnahme: Das USES in der DPR, vor allem die Units mit IN, welches vom Projektmanager verwaltet wird.
Da hier das Uses dabei komplett neu geschrieben wird, kann/wird es passieren, dass z.B. Formatierungen, Kommentare und IFDEF verloren gehen.


Deine Unit muß hierbei bloß vor/über der "Forms"-Unit liegen, denn Application gibt dort im Finalization noch existierende Forms und DataModule frei.
$2B or not $2B

Geändert von himitsu (29. Aug 2022 um 15:36 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 13:43 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