0

次のコードは、実行可能ファイルを置き換えてアプリケーションを再起動する必要があります。コンテンツは置き換えられる必要がありますが、現在実行中のインスタンスでは置き換えられないため、これは機能するはずです。

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」という新しい空のフォルダーがルート ディレクトリに作成されます。

私が望むのは、実行中の実行可能ファイルを自分のファイルに置き換え、バックアップや余分なフォルダーを持たないようにすることだけです。何か案は?

4

2 に答える 2

0

プロセスが実行されている限り、.exe はロックされていると思います。どのインスタンスが実行されるかは問題ではありません。これを回避するには、アップデーターを別の .exe に配置し、更新中にメインのアプリケーションをシャットダウンします。

于 2013-05-12T09:00:31.970 に答える