程序无法更改文件名,因为它在另一个进程中使用?

时间:2017-03-22 20:45:28

标签: vb.net forms winforms updates

修改主应用程序exe文件时,我的updater应用程序出现问题。

每当updater被自己调用时它工作正常,但如果主应用程序调用它会抱怨它仍然打开。

关闭代码时主代码中的代码,如果有更新,则调用更新程序。

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

由于安装文件,updater会替换整个文件夹。

所以订单是......

  • 重命名文件

  • 下载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

我见过其他示例,其中主应用程序调用更新程序,但我无法让它工作。

欢迎所有建议。

1 个答案:

答案 0 :(得分:0)

加载更新程序时运行此命令。

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