特定の名前のプロセス名を調べて、存在しなかった場合に再始動するWSH。
スクリプト
<?xml version="1.0"?>
<!--日本語-->
<package>
<job id="RestartIfNotExist">
<comment>
プロセス名にて検索を行い、存在しない場合に再始動コマンドを実行します。
再始動コマンドを実行後、一定時間待機し、再度プロセス名を検索し、正常に再始動できたかどうか評価します。
再検索をおこない検出できた場合、スクリプトの戻り値は0です。
そうでない場合は、それ以外の値を返します。
プログラムの再始動コマンドの戻り値は評価しません。
</comment>
<script language="VBScript">
<![CDATA[
' ----------------------------------------
' 待機時間(秒)
Const WAIT_TIME_NEXT_CHECK = 10
' 検索対象プロセス名および再始動コマンド
Dim aProcessNames, aRestartCmds
aProcessNames = Array( _
"notepad.exe", _
"ACDSee11.exe")
aRestartCmds = Array( _
"C:\[[Windows]]\System32\notepad.exe", _
"C:\Program Files\ACD Systems\ACDSee\11.0\ACDSee11.exe")
' ----------------------------------------
' 実行
Dim oWMIService
Set oWMIService = GetObject("winmgmts:\root\cimv2")
Dim vI, vCount, bError
bError = False
vCount = UBound(aProcessNames)
For vI = 0 To vCount Step 1
' プロセス名で検索
Dim oProc, oProcList, strQuery, bExist
bExist = False
strQuery = "SELECT * FROM Win32_Process WHERE Name = '" & aProcessNames(vI) & "'"
Set oProcList = oWMIService.ExecQuery(strQuery)
For Each oProc In oProcList
bExist = True
Exit For
Next
If (Not bExist) Then
' 検出できなかった場合
' 再始動コマンドを実行して、一定時間待機し
' 再度、検索コマンドを実行します。
Dim oWSH
Set oWSH = WScript.CreateObject("WScript.Shell")
Call oWSH.Run("""" & aRestartCmds(vI) & """", 7, False) '7:最小化の状態で起動
Call WScript.Sleep(WAIT_TIME_NEXT_CHECK)
' 再検索
Set oProcList = oWMIService.ExecQuery(strQuery)
For Each oProc In oProcList
bExist = True
Exit For
Next
If (Not bExist) Then
bError = True
End If
Set oWSH = Nothing
End If
Next
' ----------------------------------------
' 終了処理
Set oWMIService = Nothing
Set oWSH = Nothing
If (bError) Then
Call WScript.Quit(1)
Else
Call WScript.Quit(0)
End If
]]>
</script>
</job>
</package>
最終更新:2009年12月17日 01:19