Следующий код должен заменить исполняемый файл и перезапустить приложение, которое должно работать, потому что содержание должно быть заменено, но не в текущем запущенном экземпляре:File.Replace не ведет себя, как и ожидалось
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,
Pass ничего параметру destinationBackupFileName, если вы не хотите, чтобы создать резервную копию файла заменяются.
Однако, что на самом деле происходит то, что он делает создать резервную копию (если .exe является scrotter.exe
, то новая резервная scrotter.exe~RF729c1fe9.TMP
). Кроме того, в корневом каталоге создается новая пустая папка с именем «False».
Все, что я хочу, это заменить исполняемый файл исполняемым файлом и не иметь никаких резервных копий или дополнительных папок. Есть идеи?
Вы проверили, происходит ли это только при запуске исполняемого файла? Я тестировал с помощью простого текстового файла, и то, что вы описываете, не происходит – Steve