我有一个完全独立于我的主应用程序的更新程序。我运行 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在运行,move也可以将其重命名为app.exe.tst而不会出现任何错误。我什至可以继续在应用程序中没有任何错误。
我以为我疯了,所以我让另一个程序员看看这个,他验证了我上面所说的。
所以,我们在 try catch 中尝试了这个:
Dim readfile As New FileStream(upddir & "\app.exe", FileMode.Open, FileAccess.Read, FileShare.None)
readfile.Dispose()
我将文件共享设置为无,至少我认为它会表明文件中有人。
它仍然继续,没有任何错误。
有人知道为什么我可以重命名正在使用的文件吗?另外,有没有比我现在做的更好的方法来做到这一点?
谢谢!爱罗克