Eigener Updater / Problem: Datei in Verwendung
Hallo,
ich habe mir einen simplen Updater erstellt, der von meinem Hauptprogramm heruntergeladen wird, dann ausgeführt wird und anschließend erneut eine Datei herunterläd, welche dann das Hauptprogramm ersetzten soll. Der Updater wird vom Hauptprogramm via winExec() gestartet. Anschließend wird ein Application.Terminate ausgeführt. (Dies kann leider nichtmehr geändert werden, da das Programm schon veröffentlicht wurde.) Wenn nun versucht wird das Hauptprogramm zu ersetzten, kommt ein Zugriffsfehler, da das Programm im Hintergrund noch geöffnet ist. Sobald allerdings diese Messagebox erscheint, schließt sich dass Hauptprogramm im Hintergrund - aber eben zu spät. Ebenso schließt es sich, wenn ich ein showMessage() ausführe. Allerdings möchte ich keine Messagebox dazwischen haben, die den "Flow" behindert ;) Was machen also die Messageboxen, was ein einfaches Result nicht auch machen würden und warum wird das Hauptprogramm nicht sofort beendet? Kennt jemand das Problem? Ich hoffe auf baldige Hilfe :) |
AW: Eigener Updater / Problem: Datei in Verwendung
1, WinExec ist veraltet. Nimm ShellExecute.
2, AFAIK haben wir noch ein Halt eingebaut um wirklich die Anwendung zu beenden. Ansonsten schau doch in der Prozessliste ob der Exe-Prozess noch läuft und warte dann ein paar ms oder Zeig wenns zu lange dauert noch ein "Hauptprogramm wird heruntergefahren" oder ähnliches an. |
AW: Eigener Updater / Problem: Datei in Verwendung
Benenne die alte exe einfach um. :wink:
Dann ist es egal, ob die noch läuft. Und du kannst ja einerseits prüfen, ob das Programm noch läuft (EnumProcesses z.B.) und andererseits bekommst du ja als Rückgabewert, ob das Löschen bzw. umbenennen erfolgreich war. Ich würde die aber sowieso umbenennen, damit man die, wenn beim Update etwas schief geht, notfalls wiederherstellen kann. |
AW: Eigener Updater / Problem: Datei in Verwendung
Zitat:
|
AW: Eigener Updater / Problem: Datei in Verwendung
Als Erstes vielen Dank für die schnellen Antworten :)
Zitat:
Nachzuschauen ob der Prozess beendet wurde, finde ich jedenfalls schonmal eine gute Idee! Aber ich frage mich dennoch was durch das showMessage() ausgelöst wird. Z.B. wenn ich ein sleep() in den Updater einbaue - egal wie lang - wird das Hauptprogramm nie beendet werden bis eine Exception kommt. |
AW: Eigener Updater / Problem: Datei in Verwendung
Zitat:
Zitat:
Probier mal was passiert wenn du eine weitere Exe startest welche das Update durchführt und die erste aufgerufene Exe beendest. |
AW: Eigener Updater / Problem: Datei in Verwendung
Zitat:
Zitat:
Gibt eine Möglichkeit "zwischenzeitlich" eine Rückmeldung zu machen? Sonst werde ich evtl. einen Thread verwenden. Das müsste ja rein theoretisch dann auch funktionieren. |
AW: Eigener Updater / Problem: Datei in Verwendung
Zitat:
|
AW: Eigener Updater / Problem: Datei in Verwendung
Liste der Anhänge anzeigen (Anzahl: 1)
Delete on reboot
Code:
Oder:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\Delete on reboot\command] @="CMD /E:OFF /C REG ADD HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\Currentversion\\RunOnce /v \"Del %1 OnNextReboot\" /d ^\"cmd.exe /c DEL /F /Q \\\"%1\\\"\" /f\"" [HKEY_CLASSES_ROOT\*\shell\Open] [HKEY_CLASSES_ROOT\Folder\shell\Delete on reboot\command] @="CMD /E:OFF /C REG ADD HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\Currentversion\\RunOnce /v \"Del %1 OnNextReboot\" /d ^\"cmd.exe /c RD /S /Q \\\"%1\\\"\" /f\"" Remove on Reboot (Shell Extension - Right click...) im Anhang |
AW: Eigener Updater / Problem: Datei in Verwendung
mach das Update, also den Austausch der Dateien doch per batch Datei. Total simpel und du bruachst weder nen restart noch was anderes...
lg marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 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