以下代码应该替换可执行文件并重新启动应用程序,这应该可以工作,因为内容应该被替换但不在当前运行的实例中:
Dim tmppath As String = System.IO.Path.GetTempFileName
Private Sub YesBtn_Click(sender As Object, e As EventArgs) Handles YesBtn.Click
Dim client As New WebClient()
AddHandler client.DownloadProgressChanged, AddressOf client_ProgressChanged
AddHandler client.DownloadFileCompleted, AddressOf client_DownloadFileCompleted
client.DownloadFileAsync(New Uri("https://github.com/Yttrium-tYcLief/Scrotter/raw/master/latest/scrotter.exe"), tmppath)
End Sub
Public Sub client_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
File.Replace(tmppath, Application.ExecutablePath, Nothing)
Application.Restart()
End Sub
根据MSDN,
如果您不想创建被替换文件的备份,请将Nothing传递给 destinationBackupFileName 参数。
然而,真正发生的是它确实创建了一个备份(如果 .exe 是scrotter.exe
,那么新的备份是scrotter.exe~RF729c1fe9.TMP
)。此外,还会在根目录中创建一个名为“False”的新空文件夹。
我想要的只是用我的文件替换正在运行的可执行文件,并且没有任何备份或额外的文件夹。有任何想法吗?