動作中のプロセスを監視し、何らかの原因によりプログラムがダウンした場合、プログラムの再起動出来るフリーソフトを知りませんか??

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2009/11/09 13:29:52
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:HALSPECIAL No.1

回答回数407ベストアンサー獲得回数86

ポイント60pt

スクリプトを書いてみました。


1.監視実行するスクリプト

ソフトを起動して終了を監視します。

終了された場合は再起動します。

(ソフトの監視実行.vbs)というファイル名で保存

Option Explicit

Const SOFT = "C:\WINDOWS\system32\calc.exe"     '★監視&起動するソフト
Const RESTART_COUNT = -1                        '★再起動をする回数 -1を設定すると無限

Const vbNormalFocus = 1      '通常のウィンドウ、かつ最前面のウィンドウ

Dim objWShell, count
Set objWShell = WScript.CreateObject("WScript.Shell")

count = 0
Do
    objWShell.Run SOFT, vbNormalFocus, True '実行と待機
    count = count + 1
    If RESTART_COUNT > -1 Then
        If RESTART_COUNT < count Then
            Exit Do
        End If
    End If
Loop

Set objWShell = Nothing

2.監視終了するスクリプト

監視するスクリプトを終了します。

(監視しているソフトは終了しません)

(ソフトの監視終了.vbs)というファイル名で保存

Option Explicit

Const WATCHER_VBS = "ソフトの監視実行.vbs"  '★停止する監視スクリプト名
Dim objLocator, objService
Set objLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objService = objLocator.ConnectServer

Dim processName, colProcSet, objProc
Dim i, strTmp
'強制終了するプロセスを指定
processName = "wscript.exe"

Set colProcSet = objService.ExecQuery("Select * From Win32_Process Where Caption='" & processName & "'")
For Each objProc In colProcSet
    If InStr(objProc.CommandLine,WATCHER_VBS) > 0 Then
        objProc.Terminate
    End If
Next

'プロセスを終了させる
i = 10
Do
    strTmp = ""
    Set colProcSet = objService.ExecQuery("Select * From Win32_Process Where Caption='" & processName & "'")
    
    For Each objProc In colProcSet
        If InStr(objProc.CommandLine,WATCHER_VBS) > 0 Then
            strTmp = WATCHER_VBS
        End If
    Next
    
    If strTmp <> "" Then
        i = i - 1
        If i = 0 Then
            MsgBox "[" & WATCHER_VBS & "]を終了できませんでした。", vbCritical
            Wscript.Quit
        End If
        Wscript.Sleep 500
    Else
        Exit Do
    End If
Loop

MsgBox "[" & WATCHER_VBS & "]を終了しました。", vbInformation

★印の箇所を適宜、修正してください。


'参考 ぶりりあんとろーど(仮)

' ■[WSH]プロセスを強制終了させる

' http://d.hatena.ne.jp/haradago/20081031/p1




なお、[コントロールパネル]-[管理ツール]-[サービス]にあるプロセスの場合は、

サービスのプロパティの[回復]タブで、サービスの再起動の設定ができます。

サービスが失敗したときの回復操作を設定する

id:shotomo

HALSPECIALさんには脱帽です。今回もありがとうございます。本当に助かります。

2009/11/09 13:29:21
  • id:gogg45
    これはどうでしょうか。

    プロセス監視「Process Controller」v1.1
    http://www.forest.impress.co.jp/article/2002/10/24/okiniiri.html

    自分は使ったことが無いのでコメントで・・・
  • id:h_kondo
    プログラムが異常終了したら、もう一度同じプログラムを起動するようにバッチファイルや
    シェルスクリプトでループさせれば良いのではないでしょうか。
  • id:shotomo
    コメントありがとうございます。
    h_kondoさんバッチファイルはどのように書けばいいのでしょうか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません