次のコードは、実行可能ファイルを置き換えてアプリケーションを再起動する必要があります。コンテンツは置き換えられる必要がありますが、現在実行中のインスタンスでは置き換えられないため、これは機能するはずです。
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によると、
置き換えられるファイルのバックアップを作成しない場合は、destinationBackupFileName パラメーターにNothingを渡します。
ただし、実際にはバックアップが作成されます (.exe がscrotter.exe
の場合、新しいバックアップは ですscrotter.exe~RF729c1fe9.TMP
)。さらに、「False」という新しい空のフォルダーがルート ディレクトリに作成されます。
私が望むのは、実行中の実行可能ファイルを自分のファイルに置き換え、バックアップや余分なフォルダーを持たないようにすることだけです。何か案は?