「C Sharpの応用 - アップデート機能」の版間の差分
ナビゲーションに移動
検索に移動
細 (文字列「</source>」を「</syntaxhighlight>」に置換) |
細 (文字列「source lang」を「syntaxhighlight lang」に置換) |
||
13行目: | 13行目: | ||
<br> | <br> | ||
まず、自身のファイル名を一時的に変更する。<br> | まず、自身のファイル名を一時的に変更する。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
File.Delete("Application.old"); | File.Delete("Application.old"); | ||
File.Move("Application.exe", "Application.old"); | File.Move("Application.exe", "Application.old"); | ||
20行目: | 20行目: | ||
次に、新しいソフトウェアのダウンロードを行う。<br> | 次に、新しいソフトウェアのダウンロードを行う。<br> | ||
もし、ダウンロードに失敗した場合は、自身のファイル名を元に戻して、終了する。<br> | もし、ダウンロードに失敗した場合は、自身のファイル名を元に戻して、終了する。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
File.Move("Application.old", "Application.exe"); | File.Move("Application.old", "Application.exe"); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
27行目: | 27行目: | ||
この時、現在のソフトウェアのpidを渡す。<br> | この時、現在のソフトウェアのpidを渡す。<br> | ||
これは、新しいソフトウェアの起動後、現在のソフトウェアが終了するまで待機させるためである。<br> | これは、新しいソフトウェアの起動後、現在のソフトウェアが終了するまで待機させるためである。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
Process.Start("Application.exe", "/up " + Process.GetCurrentProcess().Id); | Process.Start("Application.exe", "/up " + Process.GetCurrentProcess().Id); | ||
this.Close(); | this.Close(); | ||
34行目: | 34行目: | ||
Main関数(ウィンドウの生成前)にて、古いソフトウェアを削除する処理を記述する。<br> | Main関数(ウィンドウの生成前)にて、古いソフトウェアを削除する処理を記述する。<br> | ||
ここでは、コマンドライン引数の確認を簡略化している。<br> | ここでは、コマンドライン引数の確認を簡略化している。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
if (Environment.CommandLine.IndexOf("/up", StringComparison.CurrentCultureIgnoreCase) != -1) | if (Environment.CommandLine.IndexOf("/up", StringComparison.CurrentCultureIgnoreCase) != -1) | ||
{ | { |
2021年11月22日 (月) 15:10時点における最新版
概要
C#において、EXEファイルやDLLファイルをアップデートを行う機能を実装したい時がある。
ここでは、実行中のソフトウェアからEXEファイルやDLLファイルをダウンロードして、自身を書き替える方法を記載する。
サンプルコード
アップデート機能の実装手順は以下の通りである。
- 現在のソフトウェアの起動中に、一時的に、自身のファイル名を別のファイル名に変更する。
例 : Application.exe -> Application.exe.old - 現在のソフトウェアから、新しいファイルをApplication.exeという名前でダウンロードする。
- 現在のソフトウェアから新しいファイルに対して、コマンドライン引数として自身のpidを渡して、起動中のソフトウェアを終了する。
- 新しいソフトウェアから、現在のソフトウェア(Application.exe.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();
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.exe.old");
}