web-dev-qa-db-ja.com

Windowsでクラッシュした場合にプログラムを自動的に再起動するにはどうすればよいですか?

Windows 2003サーバーでプログラムがクラッシュした場合、どうすればプログラムを自動的に起動できますか?プログラムがクラッシュすることがありますが、Windowsや設定に設定できる方法はありますか?

11
Zahid

通常のアプローチは、保護者プロセスとして知られているものを実行することです。これは、メインプロセスの状態を監視する別個のプロセスであり、多くの場合サービスです。保護者は、メインサービスが停止したことを検出すると、メインサービスを再生成します。

私の知る限り、これを行うためのWindows機能は組み込まれていません。

12
David Heffernan

注意:自己ループのbatファイルを実行すると便利な場合がありますが、何をしているのかを理解していない限り、あらゆる種類の大混乱を引き起こす可能性があります。これは、起動時に実行する場合に特に当てはまります。あなたは警告されました。

とにかく。 286日間、BATファイルでたくさん遊んだときのことを思い出しました。ファイルを書く場合

yourprogram.exe
some other event

bATファイルはプログラムを実行し、プログラムが終了するまでバックグラウンドで一時停止して待機します。その後、「その他のイベント」が実行されます。これは、一度に複数のことを実行したい場合に少し面倒でしたが、ここでは実際に役立ちます。これを使用すると、プログラムが終了するとすぐにプログラムを再起動する(そしてbatファイルを再実行する)ループを実行させることができます。これを https://superuser.com/questions/62525/run-a-completly-hidden-batch-file と組み合わせると、それが発生することすらわかりません。

最終的なBATファイル(この例では「restart.bat」)は次のようになります。

c:\[location]\yourprogram.exe
wscript "C:\[location]\invisible.vbs" "C:\[location]\restart.bat"

それについてです。 2行目でプログラムを(タスクを介した起動時、または単に起動フォルダでさえ)起動します。これで問題が解決するはずです:)

ああ、ループを停止したい場合は、batファイルの名前を変更するか、2行の前に「//」を付けて保存し、プログラムを終了します。

実行しているプログラムに管理者権限が必要な場合、私が見つけた解決策は、psexec( http://technet.Microsoft.com/en-us/sysinternals/bb897553.aspx )を使用して両方のプログラムを実行することでした。昇格された特権を持つバット。その場合、BATは次のようになります。

c:\[location]\psexec -h c:\[location]\yourprogram.exe
c:\[location]\psexec -h wscript "C:\[location]\invisible.vbs" "C:\[location]\restart.bat"

次に、管理者としてbatを実行するか、昇格された特権でタスクスケジューラから2行目(psexec部分なし)を実行します。注意:通常のユーザーとして実行し、UACプロンプトで[いいえ]をクリックすると、BSODが発生しました。おそらく、「特権がないためにプログラムを実行できません」と数十億回ループしたためです:)

7
Johan

似たようなものを探していました。これを処理するには、2つのオプションがあります。自分で小さなスクリプトを作成するか、既存のものを使用することができます。

いくつかグーグルした後、私はこのニースに出くわしました リスト 。ブロガーは、クラッシュまたは閉じたアプリケーションを自動的に再起動するための約8つのツールをコンパイルしました。

2
Mandeep Janjua

RegisterApplicationRestart。 を使用できます

「再起動に登録し、アプリケーションで未処理の例外が発生したり、応答がなかったりした場合、ユーザーにはアプリケーションを再起動する機会が与えられます。ユーザーの同意なしにアプリケーションが自動的に再起動されることはありません。」

ユーザーの介入なしに自動再起動する場合は、 RestartOnCrash もあります。すべてのWindowsバージョンで動作します。

2
Alasdair King

残念ながら、Windowsには、クラッシュしたときに通常のプログラムを自動的に再起動する設定がありません。

アプリケーションのGUIを積極的に操作する必要がありますか?一部の Service Wrappers (任意のアプリケーションをWindowsサービスとして実行するように設計されています)は、アプリケーションを監視し、失敗したときに再起動しますが、必ず調査してください Session 0 Isolation 邪魔にならないこと。

1
CoreTech

BDV SystemEvents などの特別なアプリを使用できます。これにより、別のアプリケーションが閉じられた場合に起動されるアプリケーションを指定できます。条件およびアクションとして同じアプリケーションを指定すると、期待される結果が得られます。

1
Denis

Windowsでプロセススーパーバイザー/ガーディアンプロセスを作成するには、いくつかの方法があります。まず、Windowsのコマンドライン機能を活用することです。 batファイルを作成します。

@echo off
:start
start /w "your app to watch.exe"
goto start

start /wプロセスが終了するのを待ちます。プロセスがクラッシュして終了すると、batスクリプトがプロセスを再起動します。

別のオプションは、無料のsupervisorツールを使用することです https://github.com/chebum/Supervisor 。クラッシュしたアプリを再起動できるほか、一度に2つ以上のアプリを監視でき、スーパーバイザーのウィンドウを閉じるとこれらのアプリが自動的に閉じます。

1
Ivan Nikitin