Vb.net 程序可以';是否因为文件名正在另一个进程中使用而不更改文件名?

Vb.net 程序可以';是否因为文件名正在另一个进程中使用而不更改文件名?,vb.net,forms,winforms,updates,Vb.net,Forms,Winforms,Updates,我在修改主应用程序exe文件时遇到更新程序应用程序问题 每当更新程序被自己调用时,它都可以正常工作,但是如果被主应用程序调用,它会抱怨它仍然处于打开状态 这是主应用程序关闭时的代码,如果有更新,则调用更新程序 Private Sub btn_Force_Click(sender As Object, e As EventArgs) Handles btn_Force.Click If MsgBox("Reverting to an old update risks the corrupt

我在修改主应用程序exe文件时遇到更新程序应用程序问题

每当更新程序被自己调用时,它都可以正常工作,但是如果被主应用程序调用,它会抱怨它仍然处于打开状态

这是主应用程序关闭时的代码,如果有更新,则调用更新程序

Private Sub btn_Force_Click(sender As Object, e As EventArgs) Handles btn_Force.Click
    If MsgBox("Reverting to an old update risks the corruption of current data, this is not recommended unless instructed. Do you wish to proceed?", vbExclamation + vbYesNoCancel, "Warning") = MsgBoxResult.Yes Then
        Shell("C:\Users\...\AppData\Roaming\...\Updater.exe")
        Application.Exit()
    End If
End Sub
由于安装文件的原因,更新程序将替换整个文件夹

所以顺序是

  • 重命名文件

  • 下载zip

  • 解压文件

  • 删除旧文件并将新文件重命名为旧文件

不幸的是,当它试图重命名该文件时崩溃,错误为“无法重命名文件,因为它正被另一个进程使用”

这是更新程序中的代码

Public Function Rename(ToReplace As String, BeReplaced As String) As Boolean
    Try
        My.Computer.FileSystem.RenameDirectory(ToReplace, BeReplaced)
        Return True
    Catch ex As Exception
        MsgBox(ex.ToString)
        Return False
    End Try
我见过其他一些例子,其中主应用程序调用更新程序,但我就是无法让它工作


欢迎所有建议。

加载更新程序后运行此操作

Dim processes As Process() = Process.GetProcessesByName("your app.exe")
For Each p As Process In processes
    p.Kill()
    p.WaitForExit()

您应该让更新程序检查a是否仍在运行,并等待它退出。updater.exe位于何处?这是一个设计问题。在开始重命名或删除任何文件之前,必须确保该文件已关闭,即Updater.exe不是只读文件。在Updater.exe中添加延迟(Thread.Sleep)以允许主应用程序正确关闭。Nope仍然会崩溃并显示相同的错误消息。这真的很烦人,因为只要不从主程序调用更新程序,它就可以正常工作。顺便说一句,更新程序位于与主程序完全分离的文件夹中。