![]() |
Wie kann ich mich selbst neu starten?
Hallo,
wie kann ich das erreichen: - in eigenem laufendem Programm treffe ich die Entscheidung, dass ich mich neu starten muss - ich kann irgendwelchen Programmstatus irgendwo wegschreiben - ich beende mich selber zuerst - ich starte mich automatisch neu Der Anwender sollte nur merken, dass das Programmfenster geschlossen und neu geöffnet wird, aber er sollte nicht gezwunden sein das Programm selber neu zu starten. Danke, Eric |
AW: Wie kann ich mich selbst neu starten?
ShellExecute
und Close Edit: Hier noch ein hilfreicher Link hättest mit der Suche auch finden können: ![]() |
AW: Wie kann ich mich selbst neu starten?
Zitat:
Eric |
AW: Wie kann ich mich selbst neu starten?
Dann halt zuerst Close und ShellExecute hab auf die schnelle geantwortet ;)
|
AW: Wie kann ich mich selbst neu starten?
Zitat:
|
AW: Wie kann ich mich selbst neu starten?
Theoretisch stimm ich DeddyH zu ;), jedoch funktionieren beide varianten sowie Close-ShellExecute als auch ShellExecute-Close
|
AW: Wie kann ich mich selbst neu starten?
Und wenn aus irgendwelchen unerfindlichen Gründen die sich beendende Instanz nicht parallel mit der neu startenden laufen soll, dann kannst du ja beim Start warten bis die alte beendet ist und erst dann weiterstarten.
Da das aber die Wartezeit für den Benutzer unnötig verlängert, verstehe ich nicht wozu das gut sein soll... |
AW: Wie kann ich mich selbst neu starten?
Normalerweise würde man aber wohl noch auswerten wollen, ob der erneute Start auch funktioniert.
Da wäre dann IMO die einfachste Möglichkeit so etwas:
Delphi-Quellcode:
Oder man definiert sich ein privates Boolean-Feld, wertet das im OnClose aus und ruft dann einfach Close auf, nachdem man das Feld ggf. gesetzt hat.
if ShellExecute(0, 'open', PChar(ParamStr(0)), nil, nil, SW_SHOWDEFAULT) > 32 then
Close else ShowMessage('Oops'); |
AW: Wie kann ich mich selbst neu starten?
Zitat:
|
AW: Wie kann ich mich selbst neu starten?
Ich dachte, allein das ShowMessage('Oops') würde schon verdeutlichen, dass das kein Code sein soll, den man produktiv einsetzen sollte. Dann muss ich das demnächst für die Forenpolizisten wohl noch extra dazuschreiben :roll:
|
AW: Wie kann ich mich selbst neu starten?
Die 32 ist keine "Magic-Number" ... das ist ein offizieller Wert, wie man ihn auch im MSDN nachlesen kann.
Zitat:
Delphi-Quellcode:
... hier wäre ein unentzifferbare Magic-Number drin.
if ShellExecute(...) and not $1F <> 0 then
|
AW: Wie kann ich mich selbst neu starten?
Delphi-Quellcode:
:mrgreen:
const
MAX_SHELLEXECUTE_ERRORVALUE = 32; |
AW: Wie kann ich mich selbst neu starten?
Ich mache das meistens so, dass ich der Anwendung über ShellExecute einen Parameter "-delayed" mitschicke, woraufhin die Anwendung am Anfang etwas wartet
(und die derzeitig laufende Instanz etwas Zeit bekommt, sich zu beenden): Restart-Routine:
Delphi-Quellcode:
Und in der dpr des Programms habe ich dann folgenden Code, der wartet, bevor die Hauptform erzeugt wird und die Anwendung gestartet wird:
// Restart the Application
procedure ApplicationRestart(const Delayed: boolean = false); var AppName : PChar; FParams : PChar ; begin AppName := PChar(Application.ExeName) ; if Delayed then begin FParams := '-delayed' ; end; ShellExecute(Application.Handle,'open', AppName, FParams, nil, SW_SHOWNORMAL) ; Application.Terminate; end;
Delphi-Quellcode:
Hat bisher immer super geklappt. Sollte das aus irgendwelchen Gründen Mist sein, bitte melden! :-)begin Application.Initialize; Application.Title := 'Meine tolle Anwendung'; // delayed start of application if (ParamCount > 0) then begin if (ParamStr(1) = '-delayed') then begin sleep(3000) ; // Wartezeit natürlich variabel :-) end; end; Application.CreateForm(TMainForm, MainForm); Application.Run; end. Natürlich kann man das verbessern...dass z.B. nicht der erste Parameter das "-delayed" sein muss und die Wartezeit auch als zusätzlicher Parameter mitgeschickt wird etc. |
AW: Wie kann ich mich selbst neu starten?
Zitat:
![]() Zitat:
Zitat:
|
AW: Wie kann ich mich selbst neu starten?
Danke für eure Antworten, das ist jetzt genug Stoff um weiter zu machen.
Eric |
AW: Wie kann ich mich selbst neu starten?
Dann von mir noch einen
Delphi-Quellcode:
if Restart then
Result := ShellExecute(0, 'open', PWideChar(ParamStr(0)), nil, nil, SW_SHOW) else Result := Msg.wParam; Zitat:
gruss |
AW: Wie kann ich mich selbst neu starten?
Zitat:
|
AW: Wie kann ich mich selbst neu starten?
Zitat:
daher macht es keinen sinn das mit zu übergeben ;) gruss |
AW: Wie kann ich mich selbst neu starten?
Wichtig ist das Handle zur Positionierung des neuen Programms. Wenn man 0 angibt, wird z.B. beim Verb runas die UAC nicht direkt angezeigt, sondern blinkt nur in der Taskleiste.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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