File in use. delete-Problematik
-
Wahrscheinlich ein triviales Problem, aber dennoch weiß ich nicht, wie es zu lösen ist.
Also: ich will zur Laufzeit verschiedene Dateien (zumeist dll) umbenennen, kopieren etc - mit dem Ziel, die alte Version eines Programmes durch eine neuere zu ersetzen.
Genau hier tut sich das Problem auf: Und zwar besteht es darin, dass eine solche dll - obwohl sie nicbt geöffnet ist - sich nicht ersetzen oder löschen lässt. In der Regel funktioniert eine File-Operation, danach kommt die Fehler-Meldung:
file in use
Das ganze wäre wahrscheinlich über einen Filehandler zu lösen und die Freigabe des allokierten Speichers, aber, wie gesagt, ich bin mir nicht sicher...
Irgendeine Idee?
Percy
Ps. Ich benutze Visual.Net, Windows 2000, CP...
-
Gehört nach WinAPI!
Percy2000 schrieb:
ich will zur Laufzeit verschiedene Dateien (zumeist dll) umbenennen, kopieren etc - mit dem Ziel, die alte Version eines Programmes durch eine neuere zu ersetzen.
Deine zu updatende Anwendung läuft doch während des updatens nicht, oder? Verwenden denn noch andere Anwendung diese DLL?
Percy2000 schrieb:
Das ganze wäre wahrscheinlich über einen Filehandler zu lösen und die Freigabe des allokierten Speichers, aber, wie gesagt, ich bin mir nicht sicher...
Wie meinst denn das?
Greetz, Swordfish
-
Nein, während des Updates natürlich nicht. - Aber sobald der Update fertig ist, wechselt das Programm in einen anderen Modus und nutzt die neue Dll.
Wie meinst Du denn das?
Die Tatsache, dass Windows einen Prozess, der nicht läuft, als laufend betrachtet, kann ich mir nur so erklären, dass beim Prozess des Umbenennens, Speicherns, Kopierens, Verschiebens etc. die Datei geblockt wird.
Das muss ja durch irgendeine Instanz überwacht werden... daher diese durch nichts begründete Vermutung, dass da irgendein Handler im Spiel ist.So habe ich die Beobachting gemacht, dass ein Verschieben, Umbenennen etc., das zeitlich dicht aufeinander folgt, einen Fehler produziert, der, wenn ich's zeitlich entzerre, nicht auftritt.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wenn du den Updater startest nachdem das Programm bereits einmal gestartet wurde ist die DLL im Speicher. Meistens wird sie bei Programmende nicht direkt entladen (Windows cached diese für schnelles erneutes Starten deines Programms).
MfG SideWinder
-
Percy2000 schrieb:
file in use
guckst du m$dn: http://www.microsoft.com/germany/msdn/library/windows/windowsnt/BlockierteDateienUeberschreiben.mspx?mfr=true
ausnahmsweise mal auf deutsch
-
Herzlichen Dank, das war sehr hilfreich.