永久に実行される実行可能ファイル
-
27-09-2019 - |
質問
VS 2005(C#)を使用してWinForm(監視)アプリケーションを作成しましたが、今ではこのアプリケーションが何らかの理由でクラッシュしたときに問題があります。自動的に再起動することを確認する必要があります。
どうすればこれを解決できますか? (Windows Servicesアプリケーションを使用することによって?)
ありがとう
解決 6
皆様のおかげで、私が選択したソリューションは次のとおりです。メインプログラムでは、例外イベント(unhandledexceptioneventhandler&threadexceptioneventhandlerを参照)を追加します。これらのイベントでは、プログラムを再起動します(ログとメールをトレースエラーに配置します)。再起動の問題については、[hkey_local_machine software microsoft windows currentversion run]にレジストリキーを追加して、Windowsの再起動後にアプリケーションが再起動されることを確認してください;)
他のヒント
はい、作成します Windowsサービス クラッシュした場合に自動的に再起動するように設定できるように機能しますが、そもそもクラッシュを防ぐことがより良い方法です!それがクラッシュする特定の理由はありますか?
適切なエラー処理とレポートを使用すると、それを書き込むことができます。
このことを考慮:
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サービスにはGUIが許可されていないため、Windowsサービスを使用することはできません。
私は、プロセスを監視し、クラッシュしたときに自動的に再起動する目に見えない「ウォッチドッグ」アプリケーションを作成するということです。
クラッシュを引き起こす可能性が最も高いコードの周りにTry Catchブロックを置くことができます。次に、例外メッセージをログファイルに書き込みます。キャッチブロックにデバッグポイントを設定して、コールスタックなどの他の詳細を表示することもできます。