VB.NET
‘アプリケーションを再起動する
Application.Restart()
C#
//アプリケーションを再起動する
Application.Restart();
using System;
public class Program
{
//エントリポイント
public static void Main()
{
try
{
Restart();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(
“再起動に失敗しました。\n\nエラー: ” + ex.Message,
“再起動に失敗しました”,
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Error);
}
}
//コマンドライン引数で指定された設定を使用して再起動する
private static void Restart()
{
//コマンドライン引数を取得する
string[] args = System.Environment.GetCommandLineArgs();
if (args.Length < 4)
{
throw new ArgumentException("コマンドライン引数が足りません。");
}
//終了を監視するプロセスIDを取得する
int processId;
try
{
processId = int.Parse(args[1]);
}
catch (Exception ex)
{
throw new ArgumentException("プロセスIDが不正です。", ex);
}
//終了の最長待機時間を取得する
int waitTime;
try
{
waitTime = int.Parse(args[2]);
}
catch (Exception ex)
{
throw new ArgumentException("待機時間が不正です。", ex);
}
if (waitTime < 1 || 60000 < waitTime)
{
throw new ArgumentException("待機時間は最長1分です。");
}
//起動するアプリケーションの実行ファイルのパスを取得する
string exePath = args[3];
if (!System.IO.File.Exists(exePath))
{
throw new ArgumentException("実行ファイルが見つかりません。");
}
//起動時に指定するコマンドライン引数を作成する
string cmd = "";
for (int i = 4; i < args.Length; i++)
{
if (4 < i)
{
cmd += " ";
}
cmd += "\"" + args[i] + "\"";
}
//再起動する
Restart(processId, waitTime, exePath, cmd);
}
///
///
/// 終了まで待機するアプリケーション
/// 待機する再長時間(ミリ秒単位)
/// 再起動する実行ファイルのパス
/// 再起動する時指定するコマンドライン引数
private static void Restart(int exitProcessId, int exitWaitTime,
string exePath, string commandLine)
{
//終了を監視するプロセスを探す
System.Diagnostics.Process p;
try
{
p = System.Diagnostics.Process.GetProcessById(exitProcessId);
}
catch (ArgumentException)
{
//見つからない時はアプリケーションがすでに終了していると判断する
p = null;
}
//アプリケーションの終了を待機する
if (p != null)
{
if (!p.WaitForExit(exitWaitTime))
{
throw new Exception(“アプリケーションが終了しませんでした。”);
}
p.Close();
}
//アプリケーションを起動する
System.Diagnostics.Process.Start(exePath, commandLine);
}
}