スタートアップ タスクから次のスクリプトを実行できます (管理者特権のバックグラウンド タスクを作成してください)。
Timeout= 30000
set events = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecNotificationQuery("select * from __instancecreationevent where targetinstance isa 'Win32_NTLogEvent' and TargetInstance.LogFile='System' and TargetInstance.EventCode=5002")
Do
WScript.Echo "==========================================================================="
WScript.Echo "Listening for IIS Rapid Fail Protection Events"
Set objLatestEvent = events.NextEvent
Wscript.Echo objLatestEvent.TargetInstance.Message
' get the AppPool name from the Eventlog message
appPool = objLatestEvent.TargetInstance.InsertionStrings(0)
WScript.Echo "Restarting Application Pool '" & appPool & "' in " & Timeout & " milliseconds"
WScript.Sleep(Timeout)
'construct ADSI path to failed AppPool and start by setting AppPoolCommand to 1
set pool = GetObject("IIS://localhost/w3svc/AppPools/" & appPool)
pool.AppPoolCommand = 1
pool.SetInfo
WScript.Echo "AppPool " & appPool & " restarted"
WScript.Echo "==========================================================================="
WScript.Echo
Loop
WMI を使用して、IIS RFP イベントをリッスンします。と組み合わせることで実現ExecNotificationQuery
しNextEvent
ます。への呼び出しNextEvent
は、新しいイベントが到着するまでブロックされます。これが発生すると、スクリプトは 30 秒間待機し、アプリケーション プールを再起動します。
とにかく、RFP が開始された場合は、プロセスが何度も何度もクラッシュする理由を確認する方が適切かもしれません。