Ich habe ein Aktualisierungsprogramm, das völlig unabhängig von meiner Hauptanwendung ist. Ich führe die update.exe aus, um die app.exe zu aktualisieren. Um zu prüfen, ob die Datei verwendet wird, verschiebe ich sie in eine andere Datei und erhalte eine Fehlermeldung, wenn sie verwendet wird. Wenn keine Probleme auftreten, benenne ich sie wieder um. Zumindest war das mein Plan...
Hauptprogramm: app.exe
Programm aktualisieren: update.exe
Dieses Programm wird über das Netzwerk verwendet, ohne dass irgendwelche Dienste laufen. Der Benutzer führt also buchstäblich die Exe über das Netzwerk auf seinem Rechner aus.
Ich muss die app.exe aktualisieren, wenn die update.exe ausgeführt wurde. Um zu überprüfen, ob die app.exe noch in Gebrauch war, wickelte ich das folgende in ein Try/Catch, um zu sehen, wenn es fehlgeschlagen ist:
IO.File.Move(upddir & " \app.exe ", upddir & " \app.exe.tst ")
IO.File.Move(upddir & " \app.exe.tst ", upddir & " \app.exe ")
Das Seltsame ist, dass selbst wenn die app.exe ausgeführt wird, der Umzug sie in app.exe.tst umbenennen kann, ohne dass ein Fehler auftritt. Ich kann sogar in der Anwendung ohne Fehler weitermachen.
Ich dachte, ich hätte den Verstand verloren, also ließ ich einen anderen Programmierer einen Blick darauf werfen, und er bestätigte, was ich oben sagte.
Also haben wir dies in einem Try-Catch versucht:
Dim readfile As New FileStream(upddir & " \app.exe ", FileMode.Open, FileAccess.Read, FileShare.None)
readfile.Dispose()
Ich habe die Dateifreigabe als keine angegeben, die, so dachte ich zumindest, zeigen würde, dass sich jemand in der Datei befindet.
Der Vorgang wurde dennoch ohne Fehler fortgesetzt.
Weiß jemand, warum ich eine in Gebrauch befindliche Datei umbenennen kann? Gibt es eine bessere Möglichkeit, als das, was ich jetzt tue?
Danke! Eroc