VS 2005(c#)を使用してwinform(監視)アプリケーションを作成しましたが、何らかの理由でこのアプリケーションがクラッシュすると問題が発生します。自動的に再起動されることを確認する必要があります。
どうすればこれを解決できますか?(多分Windowsサービスアプリケーションを使用することによって?)
ありがとう
VS 2005(c#)を使用してwinform(監視)アプリケーションを作成しましたが、何らかの理由でこのアプリケーションがクラッシュすると問題が発生します。自動的に再起動されることを確認する必要があります。
どうすればこれを解決できますか?(多分Windowsサービスアプリケーションを使用することによって?)
ありがとう
はい、Windowsサービスの作成は、クラッシュした場合に自動的に再起動するように設定できるので機能しますが、最初からクラッシュしないようにするのがより良い方法です。クラッシュする特定の理由はありますか?
優れたエラー処理とレポートを使用すると、発生して続行するエラーを単純にレポートするように記述できます。これは、IMHOが最適なルートです。
このことを考慮:
http://msdn.microsoft.com/en-us/library/cc303699.aspx
[DllImport("kernel32.dll")]
public static extern int RegisterApplicationRestart(
[MarshalAs(UnmanagedType.BStr)] string commandLineArgs,
int flags);
サポートされる最小サーバー
Windows Server 2008
http://msdn.microsoft.com/en-us/library/aa373347(VS.85).aspx
Windowsサービスを作成することは、多くの理由で長時間実行されるバックグラウンドプロセスにとって非常に良いアイデアですが、クラッシュしたアプリケーションを再起動することはその1つではありません。
アプリケーションがクラッシュする理由を解明し、それが起こらないようにする必要があります。
ぜひとも、アプリケーションをWindowsサービスに変換してください。多くの利点がありますが、問題を解決する正しい方法は、最初にアプリケーションのクラッシュを修正することです。
*強力なテキスト*ウォッチャーアプリの場合。Windowsサービスでタイマーを作成し、タイマーティックイベントで次のようにコーディングする必要があります。
Process[] procs = Process.GetProcessesByName("you app name");
if (procs.Length == 0)
Process.Start("your app filename");
クラッシュの問題について本当に何もできない場合は、ウォッチャーの代わりにトライキャッチをお勧めします。(処理された主要な例外を再スローすることを忘れないでください)
[STAThread]
static void Main()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
catch(Exception ex)
{
//log the exception here
Application.Restart();
}
}
Windowsフォームアプリケーションを使用していると言っているので、そのためにWindowsサービスを使用することはできません。これは、WindowsサービスがGUIを持つことを許可されていないためです。
プロセスを監視し、クラッシュしたときに自動的に再起動する、目に見えない「ウォッチドッグ」アプリケーションを作成することです。
クラッシュを引き起こしている可能性が最も高いコードの周りにtrycatchブロックを配置できます。次に、例外メッセージをログファイルに書き込みます。また、catchブロックにデバッグポイントを設定して、コールスタックなどの他の詳細を表示することもできます。
おかげさまで、私が選択した解決策は次のとおりです。メインプログラムで例外イベント(UnhandledExceptionEventHandlerとThreadExceptionEventHandlerを参照)を追加し、これらのイベントでプログラムを再起動します(ログと電子メールでエラーを追跡します)。また、再起動の問題については、[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run]にアプリケーションパスを使用してレジストリキーを追加し、Windowsの再起動後にアプリケーションが再起動されるようにします;)