Windows > WSH > プロセス監視して再始動

特定の名前のプロセス名を調べて、存在しなかった場合に再始動する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]
最終更新:2009年12月17日 01:19