AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Eigener Updater / Problem: Datei in Verwendung
Thema durchsuchen
Ansicht
Themen-Optionen

Eigener Updater / Problem: Datei in Verwendung

Ein Thema von topsecret · begonnen am 28. Jul 2012 · letzter Beitrag vom 29. Jul 2012
Antwort Antwort
Seite 1 von 2  1 2      
topsecret

Registriert seit: 28. Jul 2012
6 Beiträge
 
Delphi 7 Professional
 
#1

Eigener Updater / Problem: Datei in Verwendung

  Alt 28. Jul 2012, 21:11
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Eigener Updater / Problem: Datei in Verwendung

  Alt 28. Jul 2012, 21:15
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.650 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Eigener Updater / Problem: Datei in Verwendung

  Alt 28. Jul 2012, 21:18
Benenne die alte exe einfach um.
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Eigener Updater / Problem: Datei in Verwendung

  Alt 28. Jul 2012, 21:21
Benenne die alte exe einfach um.
Dann ist es egal, ob die noch läuft.
Ist kein 100% Lösung. Geht erst wieder seit einiger Zeit. Jahrelang war dieses Umbenennen nicht möglich und wer weiß ob es MS irgendwann durch ein Update wieder verbietet.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
topsecret

Registriert seit: 28. Jul 2012
6 Beiträge
 
Delphi 7 Professional
 
#5

AW: Eigener Updater / Problem: Datei in Verwendung

  Alt 28. Jul 2012, 21:33
Als Erstes vielen Dank für die schnellen Antworten

Zitat:
1, WinExec ist veraltet. Nimm ShellExecute.
Werde ich in Zukunft gerne machen, allerdings kann ich es, wie gesagt, momentan leider nicht anwenden ^^.

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.

Geändert von topsecret (28. Jul 2012 um 22:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Eigener Updater / Problem: Datei in Verwendung

  Alt 28. Jul 2012, 22:54
Werde ich in Zukunft gerne machen, allerdings kann ich es, wie gesagt, momentan leider nicht anwenden ^^.
Wieso nicht? Was ist so schwer daran eine Zeile auszutauschen? Damit würde schon mal das zu aktualisierende programm angepasst.

Z.B. wenn ich ein sleep() in den Updater einbaue - egal wie lang - wird das Hauptprogramm nie beendet werden bis eine Exception kommt.
Falls WinExec intern CreateProcess aufruft könnte ich mir schon sowas wie "race conditions" vorstellen. Keine Rückmeldung im aufgerufenen Programm - WinExec kehrt nicht zurück.
Probier mal was passiert wenn du eine weitere Exe startest welche das Update durchführt und die erste aufgerufene Exe beendest.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
topsecret

Registriert seit: 28. Jul 2012
6 Beiträge
 
Delphi 7 Professional
 
#7

AW: Eigener Updater / Problem: Datei in Verwendung

  Alt 28. Jul 2012, 23:25
Zitat:
Wieso nicht? Was ist so schwer daran eine Zeile auszutauschen? Damit würde schon mal das zu aktualisierende programm angepasst.
Klar, das mach ich auch Ich meinte auch nur das bereits ausgeteilte Programm.

Zitat:
Probier mal was passiert wenn du eine weitere Exe startest welche das Update durchführt und die erste aufgerufene Exe beendest.
Japp, das funktioniert!
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.650 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Eigener Updater / Problem: Datei in Verwendung

  Alt 29. Jul 2012, 02:58
Benenne die alte exe einfach um.
Dann ist es egal, ob die noch läuft.
Ist kein 100% Lösung. Geht erst wieder seit einiger Zeit. Jahrelang war dieses Umbenennen nicht möglich und wer weiß ob es MS irgendwann durch ein Update wieder verbietet.
Naja, um genau zu sein geht es auf der NT-Schiene (zumindest ab 2000, ich glaube auch schon vorher) und ging nur unter Win9x usw. nicht. Dass Microsoft das wieder einführt, ist wohl nicht zu erwarten.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#9

AW: Eigener Updater / Problem: Datei in Verwendung

  Alt 29. Jul 2012, 07:02
Delete on reboot

Code:
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\""
Oder:
Remove on Reboot (Shell Extension - Right click...)
im Anhang
Angehängte Dateien
Dateityp: zip removeonreboot_setup.zip (330,5 KB, 7x aufgerufen)

Geändert von hathor (29. Jul 2012 um 07:11 Uhr)
  Mit Zitat antworten Zitat
Sim_Star

Registriert seit: 18. Jan 2006
Ort: Krostitz
63 Beiträge
 
#10

AW: Eigener Updater / Problem: Datei in Verwendung

  Alt 29. Jul 2012, 10:38
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 17:34 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