▼ 2009/01/24(Sat) アプリケーションのアップデート機能を実装するには
C#でexeをアップデートする機能を実装したかったのだが、実行中のアプリからダウンロードする処理はいいとして、どうやれば自分自身を書き替えたらいいのか……というTips。
ほとんど参考文献に書いてあることを書いただけなんだけど…。
大まかな手順は
参考:
MATSYSTEM.NET ≫ Blog Archive ≫ アップデート機能
ほとんど参考文献に書いてあることを書いただけなんだけど…。
大まかな手順は
- 旧アプリ起動中に、自分自身の名前を一旦別のものに変更(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 ≫ アップデート機能
参考になった記事や興味深かった記事は、他の人も見つけやすいようにリンクやはてブしていただけると助かります…。
コメントも歓迎です。
▼ コメント(0件)
- TB-URL http://mo.kerosoft.com/095/tb/
