こんにちは、みなさん。
プログラムを自動更新する簡単なコードを開発しました。仕組みは次のとおりです。
プログラムは、バージョン文字列を含むリモート ファイルをダウンロードします。バージョン文字列がプログラムのものよりも大きい場合、自動更新が開始されます。
プログラムは、DownloadAsync とのリモート リンクを使用してプログラムの最新バージョンをダウンロードします。
プログラムは、現在のアプリ (プログラム自体) を強制終了する新しいバッチ ファイルを作成し、現在のプログラムを削除し、新しいプログラムの名前をアプリケーションの名前に変更します。次に、更新された新しいアプリケーションを実行し、自身を削除します。
ただし、バッチ ファイルを実際に実行すると問題が発生します。これが私のコードです:
private void WC_Completed(object sender, AsyncCompletedEventArgs e)
{
StringBuilder Batch = new StringBuilder();
Batch.AppendLine("@echo off");
Batch.AppendLine("taskkill /IM " + Process.GetCurrentProcess().ProcessName + ".exe /F");
Batch.AppendLine("ping localhost > nul");
Batch.AppendLine("del /f " + (char)34 + Application.ExecutablePath + (char)34);
Batch.AppendLine("ren " + (char)34 + Application.StartupPath + @"\update.exe" + (char)34 + " " + Process.GetCurrentProcess().ProcessName + ".exe");
Batch.AppendLine((char)34 + Application.ExecutablePath + (char)34);
Batch.AppendLine("del %0");
File.WriteAllText(Application.StartupPath + @"\update.bat", Batch.ToString(), Encoding.Default);
Process.Start(Application.StartupPath + @"\update.bat");
}
何らかの理由で、現在のアプリケーションを強制終了しないか、時間がかかりすぎて、プロセス全体が狂ってしまいます。名前の変更が機能しないため、更新されていないアプリを実行するだけで、ループが発生します。
私の間違いを指摘していただけますか?何が悪いのか調べてみました!
ありがとうございました!