Announcement

Collapse
No announcement yet.

Wie kann ich ein Programm beenden und gleich wieder neu starten?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie kann ich ein Programm beenden und gleich wieder neu starten?

    Hallo,

    wie kann ich unter Delphi4 Client/Server,wenn ich auf einen Button klicke das laufende Programm beenden und danach gleich wieder neu starten?

    cu Maik.

  • #2
    Hallo <br>
    ich denke am einfachsten über ein 2. Programm das beim beenden des 1. Programms mit entsprechendem Parameter gestartet wird um das 1. Programm zu starten und sich selbst zu Terminieren

    Comment


    • #3
      <b>Schreib doch eine Batchdatei</b><br>
      dort schreibst Du den Pfad und Namen Deines Programms rein<br>
      -starte dann die Batchdatei<br>
      -beende Dein Programm z.B. mit HALT<br>
      und schwups, hat sich Dein Programm neu gestartet.<br&gt

      Comment


      • #4
        Mit einem Batch-File wuerde ich es nicht loesen, da das nicht unbedingt ueberall funktioniert.<br>
        Andreas Loesung ist die einfachte. schreibe ein zweites Programm, das du mit ShellExecute startest. Direkt danach beendest du das erste Programm. Dem Zweitprogramm gibst du das zu startende Programm als Kommandozeilenparameter mit. Das Zweitprogramm ist ein normales Delphiprogramm, aber du manipulierst das .dpr. Es wird keine Form aufgemacht und kein .Run aufgerufen. Stattdessen rufst du dort wiederum ShellExecute mit ParamStr(1) auf

        Comment


        • #5
          Hallo Maik,<br>evt. hilft Dir folgende Diskussion weiter.<br>
          http://www.entwickler-forum.de\webx?128@@.ee8654e <br>
          jen

          Comment


          • #6
            <pre>

            <code><font size=2 face="Courier New"><b>unit </b>Restart;
            <br>
            <b>interface
            <br>
            var
            </b>ReRestartProgram: Boolean = False;
            <br>
            <b>implementation
            <br>
            uses </b>Windows;
            <br>
            <b>procedure </b>DoReStart;
            <b>var
            </b>StartupInfo: TStartupInfo;
            ProcessInformation: TProcessInformation;
            <b>begin
            </b>FillChar(StartupInfo, SizeOf(StartupInfo), <font color="#0000FF">0</font>);
            StartupInfo.cb := SizeOf(StartupInfo);
            StartupInfo.wShowWindow := sw_ShowNormal;
            CreateProcess(PChar(ParamStr(<font color="#0000FF">0</font>)), <font color="#0000FF">''</font>, <b>nil</b>, <b>nil</b>, False, <font color="#0000FF">0</font>, <b>nil</b>, <b>nil</b>,
            StartupInfo, ProcessInformation);
            <b>end</b>;
            <br>
            <b>initialization
            finalization
            if </b>ReStartProgram <b>then </b>DoReStart;
            <b>end</b>.
            <br>
            <font color="#008080"><i>{
            Diese Unit als ERSTE in die Uses Klausel des Project Quelltextes einbinden.
            Soll die Anwednung sich selbst neu startet so muß ReStartProgram := True gesetzt
            werden und anschließend die laufende Applikation einfach beendet werden.
            }
            <br>
            </i></font>Hagen
            </font>
            </code></pre&gt

            Comment


            • #7
              Alter Schweinepriester ;-) Du kennst hat immer noch die besten Tricks

              Comment


              • #8
                Oh Danke für das Kompliment <br>
                Obiger Code ist nur ein Teil einer spez. Unit. Diese Unit "RunOne" verhindert das eine App mehrmals gestartet wird und kann auch die App neu starten. Der beste Zeitpunkt zum Verhindern doppelter Instancen ist so früh wie möglich. Der frühestmöhliches Zeitpunkt ist erreicht wenn eine Unit ohne andere Unit-Referenzen als ERSTE im Projectquelltext steht. D.h. diese Unit wird nach SysInit und System initialisiert. Damit wird diese Unit in der Finalisierung enstprechend spät, nämlich als drittletzte Unit aufgerufen.

                Gruß Hage

                Comment

                Working...
                X