Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Nach Programm Ende noch eine Andwendung ausführen ?? (https://www.delphipraxis.net/92713-nach-programm-ende-noch-eine-andwendung-ausfuehren.html)

Luke_83 24. Mai 2007 20:16


Nach Programm Ende noch eine Andwendung ausführen ??
 
Hallo wollte mal fragen ob es möglich ist, wenn man sein eigenes Delphi Programm beendet hat noch eine Kopierfunktion aufzurufen. Bräuchte diese für eine Update Funktion.

Und zwar läßt sich das Hauptprogramm über einen Server Dwonloaden. Danach muss die alte Version ersetzt werden und da haberts momentan.

Schonmal vielen Dank für die Hilfe

Matze 24. Mai 2007 20:19

Re: Nach Programm Ende noch eine Andwendung ausführen ??
 
Hi,

das geht meines Wissens nicht. Du kannst jedoch eine zweite kleine Anwendung schreiben, die du am Ende aufrufst und die dann wartet, bis sich das Hauptprogramm geschlossen hat und dieses dann durch eine aktuelle Version ersetzt.

dominikkv 24. Mai 2007 20:20

Re: Nach Programm Ende noch eine Andwendung ausführen ??
 
kannst du über eine Batch-Datei machen oder ne 2te exe die wartet bis altes programm geschlossen und dann kopiert

Luke_83 25. Mai 2007 09:55

Re: Nach Programm Ende noch eine Andwendung ausführen ??
 
Gut Danke. Ist zwar etwas umständlich mit dem externen Programm aber es funktioniert immerhin , so wie ich mir gedacht habe.

TeronG 25. Mai 2007 10:03

Re: Nach Programm Ende noch eine Andwendung ausführen ??
 
Meine Methode für n Update:

Erstmal "besorge" ich mir die neue version (Exename.new).
Dann benenne ich meine EXE (exename.exe) in exename.bak um (sicher is sicher).
Nun benenne ich meine neue Version (exename.new) in exename.exe um.
Zuletzt beende und neustarte ich meine Anwendung....

EDIT:
ich mach mal "meine" neustartprocedure rinn ... könnte hilfreich sein
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;

Assertor 25. Mai 2007 10:18

Re: Nach Programm Ende noch eine Andwendung ausführen ??
 
Und das, was Ihr da macht, klappt alles unter Vista mit UAC?

Ich mach das so:
1) Prüfen auf Updates per HTTP (am einfachsten insbesondere wg. Rechten, Firewall etc!)
2) Download in das Temp-Verzeichnis des aktuellen Benutzers unter einem nicht vergebenen Namen mit Prefix (Anwendungxyz-Update-123.exe), natürlich Hash-Vergleichen
3) Hilfsprogramm mit den Parametern aufrufen, die Pfad zum Update und aufrufenden Hauptprogramm enthalten
4) ShellExecute + Wait für das Update mit Elevation-Anforderung (tauscht Dateien im Programmeverzeichnis aus)
5) Update-EXE löschen, wenn möglich (wollen das Temp des Benutzers ja nicht zumüllen)
6) Hauptprogramm erneut starten

Inkl. Fallback, falls das Hilfsprogramm nicht gefunden wird (wird direkt Update aufgerufen mit Hinweis auf manuellen Programmneustart). Zusätzlich hab ich eine Benachrichtigung drin (Tray bzw. Messagebox für Win9x) und einen Update-Wizard mit Fehlerprüfung (Download-Abbruch, Verbindungsfehler, Hash-Fehler) und Informationen (je nach System und Verbindung mit Progressbar, Marquee oder Marquee-Simulation für ältere Systeme) etc.pp.

Viel bequemer geht es für den Benutzer nicht.

Gruß winkel79

TeronG 25. Mai 2007 11:58

Re: Nach Programm Ende noch eine Andwendung ausführen ??
 
Zitat:

Zitat von winkel79
Und das, was Ihr da macht, klappt alles unter Vista mit UAC?

Nicht die geringste Ahnung :gruebel: (weilichnichhab).... aber war ja auch nicht gefragt :mrgreen:

Zitat:

Zitat von winkel79
Viel bequemer geht es für den Benutzer nicht.

Da kann meine Version locker mithalten :)

Nuclear-Ping 25. Mai 2007 13:11

Re: Nach Programm Ende noch eine Andwendung ausführen ??
 
Zitat:

Zitat von TeronG
Zitat:

Zitat von winkel79
Viel bequemer geht es für den Benutzer nicht.

Da kann meine Version locker mithalten :)

Unter Vista never. ;)

Da scheiterts bei aktivem UAC wg Virtualisierung schon beim umbenennen und am Ende vom Update startest du die gleiche Version wie vorher. Ergo: Loop.

TeronG 29. Mai 2007 07:31

Re: Nach Programm Ende noch eine Andwendung ausführen ??
 
Zitat:

Zitat von Nuclear-Ping
Unter Vista never. ;)

Werde nicht wagen dir zu wiedersprechen ... aber bis wir Vista haben (oder der Author es verlangt) funtzt es so bei mir auch ohne 2t EXE.
Eine 2te EXE währe natürlich auch eine schöne und einfach zu realisierende Sache allerdings müsste man auch da erstmal gugn wie es in der Praxis klappt (Schreibrechte, ...)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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