2009/01/24(Sat)アプリケーションのアップデート機能を実装するには
2009/01/24 16:50
ほとんど参考文献に書いてあることを書いただけなんだけど…。
大まかな手順は
- 旧アプリ起動中に、自分自身の名前を一旦別のものに変更(Application.exe -> Application.old)
- 旧アプリから、新アプリをApplication.exeという名前でダウンロード
- 旧アプリから新アプリに引数で自分のpidを渡し、終了する
- 新アプリは、旧アプリを削除する(Application.old)
- まず、ダウンロード処理する前に、
File.Delete("Application.old"); File.Move("Application.exe", "Application.old");
として、自分自身の名前をいったん変えます。 - ダウンロード処理を行います。
成功した場合は次のステップへ、失敗した場合は、
File.Move("Application.old", "Application.exe");
として、元に戻しておきます。 - 新しいアプリを起動します。このとき、旧アプリのpidを渡します。
新しいアプリ起動後、古いアプリが終了するまで待機させるためです。
Process.Start("Application.exe", "/up "+Process.GetCurrentProcess().Id); this.Close();
- Program.csのstatic void Main()辺りが良いでしょうか。
ウィンドウが作られる前に旧アプリの掃除コードを書いておきます。
サンプルのため、引数のチェックを簡略化してますが、きちんとやる方がいいでしょう。
if (Environment.CommandLine.IndexOf("/up", StringComparison.CurrentCultureIgnoreCase) != -1) { try { string[] args = Environment.GetCommandLineArgs(); int pid = Convert.ToInt32(args[2]); Process.GetProcessById(pid).WaitForExit(); // 終了待ち } catch (Exception) { } File.Delete("Application.old"); }
参考:
MATSYSTEM.NET ≫ Blog Archive ≫ アップデート機能