メイン アプリケーションから完全に独立した更新プログラムがあります。update.exe を実行して app.exe を更新します。ファイルが使用中かどうかを確認するために、別のファイルに移動し、使用中の場合はエラーをキャッチします。問題が発生しない場合は、名前を元に戻します。少なくともそれは私の計画でした...
メインプログラム:app.exe
更新プログラム:update.exe
このプログラムは、サービスを実行せずにネットワーク経由で使用されます。したがって、ユーザーは文字通り、自分のマシンでネットワーク経由で exe を実行しています。
update.exe が実行されたら、app.exe を更新する必要があります。app.exe がまだ使用されているかどうかを確認するために、次のコードを try/catch でラップして、失敗したかどうかを確認しました。
IO.File.Move(upddir & "\app.exe", upddir & "\app.exe.tst")
IO.File.Move(upddir & "\app.exe.tst", upddir & "\app.exe" ")
面白いことに、app.exe が実行されている場合でも、この移動によりエラーなしで app.exe.tst に名前を変更できます。エラーなしでアプリケーションを続行することもできます。
私は頭がおかしいと思ったので、別のプログラマーにこれを見てもらい、彼は私が上で言ったことを確認しました.
したがって、これを try catch でラップしてみました。
Dim readfile As New FileStream(upddir & "\app.exe", FileMode.Open, FileAccess.Read, FileShare.None)
readfile.Dispose()
私はファイル共有を none として置きました。少なくとも、ファイルに誰かがいたことを示すと思いました。
それはまだエラーなしで続行されました。
使用中のファイルの名前を変更できる理由を知っている人はいますか? また、私が今していることよりもこれを行うためのより良い方法はありますか?
ありがとう!エロク