3

こんにちは、みなさん。

プログラムを自動更新する簡単なコードを開発しました。仕組みは次のとおりです。

  1. プログラムは、バージョン文字列を含むリモート ファイルをダウンロードします。バージョン文字列がプログラムのものよりも大きい場合、自動更新が開始されます。

  2. プログラムは、DownloadAsync とのリモート リンクを使用してプログラムの最新バージョンをダウンロードします。

  3. プログラムは、現在のアプリ (プログラム自体) を強制終了する新しいバッチ ファイルを作成し、現在のプログラムを削除し、新しいプログラムの名前をアプリケーションの名前に変更します。次に、更新された新しいアプリケーションを実行し、自身を削除します。

ただし、バッチ ファイルを実際に実行すると問題が発生します。これが私のコードです:

        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");
    }

何らかの理由で、現在のアプリケーションを強制終了しないか、時間がかかりすぎて、プロセス全体が狂ってしまいます。名前の変更が機能しないため、更新されていないアプリを実行するだけで、ループが発生します。

私の間違いを指摘していただけますか?何が悪いのか調べてみました!

ありがとうございました!

4

1 に答える 1