AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sich selbst neu starten?

Ein Thema von PeterPanino · begonnen am 18. Apr 2006 · letzter Beitrag vom 29. Jul 2010
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Sich selbst neu starten?

  Alt 19. Apr 2006, 08:57
Ganz unwichtig ist die Frage nicht. Auch Viren, Trojaner, etc. sorgen oft dafür, dass sie beim Beenden automatisch neu gestartet werden.
Üblicherweise läuft dafür ein zweites Programm (oder ein Dienst) im Hintergrund mit, das überwacht, ob das Programm noch läuft.
Peter
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Sich selbst neu starten?

  Alt 19. Apr 2006, 09:37
Zitat von Nicodius:
Morgen
jetzt erklär mir nochmal wieso du das brauchst
grüße Nico
Das ist etwas kompliziert zu erklären, ist aber DEFINITIV nichts Illegales.
  Mit Zitat antworten Zitat
mbamler

Registriert seit: 19. Mai 2005
Ort: Hamburg
118 Beiträge
 
Delphi 7 Architect
 
#13

Re: Sich selbst neu starten?

  Alt 19. Apr 2006, 09:44
Zitat von PeterPanino:
Zitat von Nicodius:
Morgen
jetzt erklär mir nochmal wieso du das brauchst
grüße Nico
Das ist etwas kompliziert zu erklären, ist aber DEFINITIV nichts Illegales.

Mach doch einfach sowas wie:

...
Shellexecute('Programmname.exe', true); //mit warten bis das Programm läuft
Terminate; //diese Instanz beenden
...

Gruß
Matthias
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#14

Re: Sich selbst neu starten?

  Alt 19. Apr 2006, 09:54
Oder du schreibtst ne 2-Zeilen-Batch...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: Sich selbst neu starten?

  Alt 19. Apr 2006, 11:26
Eine Zeile mehr und man hat auch eine Ausstiegsmöglichkeit:

Code:
@echo off
rem this is demo.cmd
demo.exe
if %errorlevel% GTR 0 exit
demo.cmd
Übrigens ein Trick aus der Zeit, als man noch nicht wusste, was ein Watchdog Service ist bzw. wie man ihn implementieren könnte. Das letzte mal habe ich das unter MS-DOS 2.10 bei Magee AutoMenu gesehen...

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#16

Re: Sich selbst neu starten?

  Alt 19. Apr 2006, 11:38
Also ich habe mir für dieses "Feature" einfach ein kleines Kommandozeilen-Programm geschrieben,
welches wartet bis mein Hauptprogramm beendet wurde und es dann neustartet.

Ist leicht umzusetzten, klein (44KB), resourcenschonend und sieht professioneller aus als ne Batch-Datei
(Außerdem denke ich, dass das die "sauberste" Methode, da so dem Hauptprogramm genug Zeit eingeräumt wird,
damit es sich selbst sauber beenden kann)
Manuel
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#17

Re: Sich selbst neu starten?

  Alt 20. Apr 2006, 01:29
Das wichtigste Ziel der Methode "Sich selbst neu starten" ist, sicherzustellen, dass nicht beide Programme zur gleichen Zeit auf die selben Daten zugreifen können. Deshalb habe ich mir folgende Vorgehensweise ausgedacht (ProgrammA und ProgrammB sind verschiedene Instanzen *desselben* EXE-Programms):

- ProgrammA startet ProgrammB

- ProgrammB überprüft in einer Zeitschleife von X Sekunden im OnCreate-Event des Hauptfensters, ob ProgrammA läuft (etwa mittels Prozessliste):
- Wenn nein: Zeitschleife abbrechen und normal starten
- Wenn ja: Überprüfung in der Zeitschleife weiter ausführen:
- Wenn Zeitschleife X Sekunden abgelaufen: Sich selbst beenden.

- ProgrammA beendet sich selbst

Damit hätte man mehrere Vorteile:
- Starten einer zweiten Instanz wird verhindert.
- Programm kann sich selbst neu starten. Durch Ausführung der Instanzprüfung am Beginn des ersten Form.OnCreate-Events wird garantiert, dass nicht Programmcode in mehr als einer Instanz zur gleichen Zeit ausgeführt wird.

Wie könnte man die Zeitschleife am besten programmieren?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#18

Re: Sich selbst neu starten?

  Alt 20. Apr 2006, 08:56
Hallo Peter,

vergiss die Zeitschleife, das Starten einer zweiten Instanz deines Programms verhinderst du so oder so nicht - warum auch. Verhindern musst du ja nur die gleichzeitige Benutzung bestimmter Ressourcen. Die zweite Instanz wird immer regulär gestartet, prüft dann eine Integritätsbedingung (Hier im Forum suchenCreateMutex) und tritt dann entweder in die Phase der Ressourcenbeschaffung ein oder beendet sich, mitunter nach Übergabe der Aufrufparameter an die existierende Instanz. Wichtig ist nur, dass du den Ein- und Austritt in bzw. aus dem kritischen Teil deines Programmes korrekt signalisierst. Eine überlappende Ausführung außerhalb dieses Blockes ist kein Problem.

Grüße vom marabu
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#19

Re: Sich selbst neu starten?

  Alt 27. Jul 2006, 11:47
Hm, ich hätte auch gerne die Möglichkeit, mein Programm neu zu starten, aber hier ist keine Lösung zu funden. Der Gund des Neustarts: Einstellungen übernehmen.
Achim
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: Sich selbst neu starten?

  Alt 27. Jul 2006, 12:05
Hi,

ich benutze folgende Routine, um z.B. nach kritischen Fehlern mein Programm wieder zu starten.

Delphi-Quellcode:
procedure ForceKillApplication(ARestart: boolean = False);
var
  AStartInfo: TStartupInfo;
  AProcInfo: TProcessInformation;
begin
  if ARestart then
  begin
    GetStartupInfo(AStartInfo);
    FillChar(AProcInfo, SizeOf(TProcessInformation), #0);
    CreateProcess(nil, GetCommandLine, nil, nil, False,
      CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS, nil,
      PChar(GetCurrentDir), AStartInfo, AProcInfo);
  end;
  TerminateProcess(GetCurrentProcess, 1);
end;
Frank
Frank Reim
  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 08:20 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