Announcement

Collapse
No announcement yet.

Programm-Restart

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

  • Programm-Restart

    Hi,<p>
    in meinem Programm gibt es einen Menüpunkt "Settings", wo der User allgemeine Einstellungen vornehmen kann. Bei bestimmten Einstellungen ist es allerdings notwendig, dass das Programm neu gestartet wird, damit sie wirksam werden. Gibt es eine Möglichkeit, dass sich das Programm - nach Ausgabe einer entsprechenden Meldung natürlich - selbst beendet und wiederstartet?<br>
    Danke für jeden Tip.<p>
    Grüße, Reimund

  • #2
    Hi,

    was spricht dagegen per ShellExecute eine zweite Instanz zu starten, während die erste noch läuft und dann erst die erste zu Beenden

    Comment


    • #3
      Hi Jochen,<p>
      ja, das wäre eine Möglichkeit. Und gar nicht so schlecht. Nichts kompliziertes, sondern einfach und effektiv. Danke für den Tip.<p>
      Grüße, Reimun

      Comment


      • #4
        Wenn ich aber mein programm kein zweites mal aufrufen kann, weil man es gesperrt hat zB mit hilfe von mutex?<br>
        Was gibt es dann fuer moeglichkeiten

        Comment


        • #5
          Dann kannst Du zum Beispiel eine zweite Anwendung zur Hilfe ziehen:<p>
          Anwendung ruft StarterApp auf<br>
          StarterApp wartet, bis Anwendung beendet wurde (Mutex prüfen)<br>
          Anwendung beendet sich<br>
          StarterApp ruft Anwendung erneut auf<p>
          Schöne Grüße, Mario Noac
          Schöne Grüße, Mario

          Comment


          • #6
            Ich benutze etwas ganz Simples um z.B. Updates zu installieren welche die laufende Exe dann selbst austauschen. Dazu wird einfach eine .bat erstellt welche in einer Schleife versucht die laufende Anwendung zu löschen:
            <p>
            <pre>
            procedure LoadUpdate(const ZipFile : String);
            var
            ZipForge1 : TZipForge;
            sAppPath, sAppName : String;
            aBatchFile : String;
            Batchfile : TStringlist;
            begin
            sAppPath := ExtractFilePath(Paramstr(0));
            sAppName := ExtractFileName(Paramstr(0));
            FileCopyShell(ZipFile,sAppPath,False,False);
            ZipForge1 := TZipForge.Create(nil);
            with ZipForge1 do begin
            BaseDir := sAppPath;
            FileName := sAppPath+ExtractFileName(ZipFile);
            OpenArchive(fmOpenRead);
            ExtractFiles('*.*');
            CloseArchive;
            Free;
            end;
            DeleteFile(sAppPath+ExtractFileName(ZipFile));
            if Fileexists(sAppPath+'_'+sAppName) then begin
            aBatchFile := CreateTempFileName;
            aBatchFile := ChangeFileExt(aBatchFile,'.bat');
            Batchfile := TStringlist.Create;
            with Batchfile do begin
            add(':label1');
            //versuche zu löschen
            add('del "' + Paramstr(0)+ '"');
            //wenn nicht erfolgreich wieder von vorn
            add('if exist "' + Paramstr(0) + '" goto label1');
            //umbenennen
            add('rename "' + sAppPath+'_'+sAppName+'" '+sAppName);
            //Readme anzeigen
            add('"'+sAppPath+'Readme.txt"');
            //Neustart der EXE
            add('"'+Paramstr(0)+'"');
            //aufräumen
            add('del "' + aBatchFile +'"');
            add('del "' + ChangeFileExt(aBatchFile,'.bat') +'"');
            SaveToFile(ChangeFileExt(aBatchFile,'.bat'));
            Free;
            end;
            WinExec(PChar(aBatchFile),SW_hide);
            end;
            end;
            </pre&gt

            Comment

            Working...
            X