• ベストアンサー

アプリケーションのフリーズを検出したい

WSH(VBScript)を使って、アプリケーション(GoogleEarth)をコントロールしています。 アプリがフリーズすることがあり、フリーズするとスクリプトはアプリからの応答待ちと思われる状態のまま止まってしまいます。 そこでフリーズを検出し、OSの再起動をかける仕組みを探しています。 VBScriptで何とかしようと思い作成しましたが、効果が得られなかったスクリプトを参考までに載せます。 On Error Resume Next Set ge = WScript.CreateObject("GoogleEarth.ApplicationGE") IF Err.Number <> 0 THEN … END IF 上記の場合、Setの一行でスクリプトが止まります(フリーズではなく、待ち状態だと思います) できれば、VBScriptでの対応をと考えていますが、 他のプログラムでも、公開、発売されているソフトでも構いませんので、 特定のアプリケーションのフリーズ状態(応答無し)を検出できないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

SendMessageTimeoutでWM_NULLを送る方法があるようです。 「アプリケーションが応答を停止したことを検出する方法。 」 http://support.microsoft.com/kb/231844/ja

dede_nd
質問者

補足

ありがとうございます。 参考をサイトをみて、試行錯誤しています。返事遅くなりまして失礼しました。

その他の回答 (1)

回答No.2

同じくアドバイスです。(ご参考までに。) 実行中のプロセスのシステムコールフックについて http://oshiete1.goo.ne.jp/qa3503196.html Linuxだとtopコマンドを使えば、プロセスのリアルタイム表示が可能ですよね。(Winでも似たようなのがあるのかな?専門外なのでよく分からず・・。)

参考URL:
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230904/
dede_nd
質問者

補足

ありがとうございます。 下の方から頂いたのもですが、windowsがプロセスを監視できるような仕組みを提供してるんですね。勉強になります。

関連するQ&A

  • アプリケーションが起動しているかどうかの判断

    いつもお世話になります。 やりたいことは、クライアントサイドのスクリプトで、 あるアプリケーションが起動しているかどうかの 判断を行いたいです。 ネットで以下のようなプロセスを見るスクリプトを見つけてたのですが、 クライアントサイドのスクリプトでは動作しないようです。 Function IsRun() Dim strProcName ' プロセス名 Dim objProcList ' プロセス一覧 Dim objProcess ' プロセス情報 Dim bRet ' 戻り値 On Error Resume Next bRet = false strProcName = "xxxx.exe" Set objProcList = GetObject("winmgmts:").InstancesOf("win32_process") If Err.number <> 0 then msgbox "Err.Number=" & Err.number & vbcrlf & "Err.Description=" & Err.Description exit function end if For Each objProcess In objProcList If LCase(objProcess.Name) = strProcName Then bRet = true ' 起動している Exit For End If Next On Error Goto 0 IsRunNotesClt_b = bRet Set objProcList = Nothing End Function どなたかクライアントサイドのスクリプトで アプリケーションが起動してるかどうかを判断できる方法をご教授いただけないでしょうか? (ブラウザはIE限定なので、できればvbscriptが良いです) よろしくお願いします。

    • ベストアンサー
    • HTML
  • VBSでADO接続に失敗した場合にフリーズする

    VBSでADO接続に失敗した場合にフリーズするのですが、何とか ならないでしょうか。 以下、わたしのコード(戻り値を返(WSCript.Quit Err.Number)したいので、On Error Resume Nextは外せません。) Option Explicit On Error Resume Next Dim objADO Set objADO = CreateObject("ADODB.Connection") objADO.Open "Driver={SQL Server};server=" & WScript.Arguments(0) & _ "; database=" & WScript.Arguments(1) & _ ";uid=" & WScript.Arguments(2) & _ ";pwd=" & WScript.Arguments(3) & ";" objADO.Execute(WScript.Arguments(4)) objADO.Close Set objADO = Nothing WSCript.Quit Err.Number

  • WSH createobjectで指定出来るアプリケーション

    CreateObjectで指定できるアプリケーションの指定方法について質問致します。 WSHでExcelオブジェクトを生成する場合、  set objxls = wscript.createobject("Excel.Application") や  set objxls = wscript.createobject(<対象exeのパス> などで指定しますが、 初めの表記で指定できるアプリケーション名はどうやって調べれば よいでしょうか? インストールしているアプリのオブジェクトを 初めの表記方法を使って生成したいと考えております。 よろしくお願い致します。

  • バッチファイル(.bat)へWSH(.wsf)のエラーコードの返し方について

    はじめまして、kiwi88と申します。 バッチファイル(.bat)からwshスクリプト(.wsf)を呼び出すプログラムを作成しました。 そこで、wshスクリプトで実行されたエラーコードを呼び出しもとのバッチファイル(.bat)に返すことはできますでしょうか。 以下はバッチファイル(.bat)からwshスクリプト(.wsf)を呼び出す箇所のソースです。 ◆バッチファイル(test.bat)◆ ---------------------------------------- ~※処理内容省略~ cscript test.wsf //nologo //Job:wshscript > batch.log IF %ERRORLEVEL% NEQ 0 GOTO ERR exit :ERR set ret=%ERRORLEVEL% echo ****** [%:ERRORLEVEL=%ret%] ****** > err.txt exit %ret% ---------------------------------------- 以下はwshスクリプト(.wsf)のエラーコードを返す箇所のソースです。 ◆wshスクリプト(test.wsf)◆ ---------------------------------------- <job id = "wshscript"> <script language = "VBScript"> <![CDATA[ Option Explicit Function Main() ~※処理内容省略~ err = Err.Number Main = err End Function ]]> </script> </job> ---------------------------------------- 長くなってしまい、申し訳ありませんが、 ご教授願えますでしょうか。 宜しくお願いいたします。

  • VBSでフォルダ、ファイル作成時のエラーコード

    フォルダ、ファイルが存在しないとき、作成するスクリプトをVBSで作成していますが、疑問点があるのでご教示ください。 objFSO.CreateFolder、objFSO.CreateTextFileを実行が、正常に行われた場合、 Err.Numberに0がセットされると思っていましたが、実際は違っていました。 objFSO.CreateFolderでフォルダが作成される場合、Err.Numberに13が返されます。 objFSO.CreateTextFileでファイルが作成される場合、Err.Numberに438が返されます。 このスクリプトを実行後、フォルダ、ファイルが存在しない場合、作成されることも確認しています。 フォルダ作成後、作成されたフォルダに対して、ファイルの作成/データの書き込みのアクセス権を拒否にすると返されるErr.numberに70がセットされることも確認しています。 なぜ、フォルダ、ファイルが作成された場合、0が返されないのかご存知の方がいらっしゃいましたらご教示ください。 また、その情報が記載されている書籍およびサイトがあれば、お教えいただければ、幸いです。 Option Explicit Dim objFSO Dim objFile Const strFolderName = "C:\VBS" Const strFileName = "C:\VBS\test.txt" On Error Resume Next Set objFSO = CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then WScript.Echo "FSOオブジェクトを作成しました" Else WScript.Echo "FSOオブジェクトを作成できませんでした" WScript.Quit(1) End If If objFSO.FolderExists(strFolderName) Then WScript.Echo "フォルダが見つかりました" Else WScript.Echo "フォルダが見つかりませんでした" If objFSO.CreateFolder(strFolderName) Then If Err.Number = 13 Then WScript.Echo "フォルダを作成しました" Else WScript.Echo "フォルダを作成できませんでした" WScript.Quit(1) End If End If End If If objFSO.FileExists(strFileName) Then WScript.Echo "ファイルが見つかりました" Else Script.Echo "ファイルが見つかりませんでした" If objFSO.CreateTextFile(strFileName) Then If Err.number = 438 Then WScript.Echo "ファイルを作成しました" Else WScript.Echo "ファイルを作成できませんでした" WScript.Quit(1) End If End If End If

  • VBScriptでのDBのエラー取得

    VBScriptでADO(ADODB)接続により、SQLServer(2012)に接続して クエリを発行し、結果をファイルに出力するVBScriptを作成して います。 SQL実行時のエラーに対応する為、VBScriptにてエラーオブジェクトのプロパティ (Err.Number、Err.Description)を使用し、エラー番号と内容を取得しているの ですが、SQL Serverから発行しているエラー番号、エラー内容を取得したいので すが、取得できません。 どのようにすれば、データベース固有のエラーを取得ができますか。 是非ご教示いただきたく、 お手数をおかけ致しますが、宜しくお願い致します。 ------------------------------------------------- Option Explicit Dim objADO Dim objRS Dim Sql if WScript.Arguments.Count <> 1 then WScript.echo("usage: script.vbs arg1") WScript.Quit(-1) end if arg1 = WScript.Arguments(0) Set objADO = CreateObject("ADODB.Connection") objADO.Open "Provider=SQLOLEDB;" & _ "Data Source=hoge;" & _ "Initial Catalog=hoge;" & _ "Integrated Security=SSPI;" sql = "" sql = "select ~ where column ='"&arg1&"'" set objRS = objADO.Execute(sql) If Err.Number <> 0 Then objADO.Close Set objADO = Nothing WScript.Quit(-1) End If sql = "" sql = "update ~ ~ where column ='"&arg1&"'" objADO.Execute(sql) If Err.Number <> 0 Then 更新の破棄とエラー内容の表示 Else 更新を反映 End If objADO.Close Set objADO = Nothing

  • VBS

    VBSであるファイルを1行ずつ読み込み、その読み込んだ値を ある別のファイルにリダイレクトしたいのですが、 どのように書けばよいか教えてください。 下記のように、echoでは出すことができるのですが、 ファイルにリダイレクトというのができません。 よろしくお願いします。 ==== sample shell ========================= Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.OpenTextFile("d:\dr1.txt") If Err.Number = 0 Then Do While objFile.AtEndOfStream <> True WScript.Echo objFile.ReadLine Loop objFile.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing ============================================================

  • Windows Script Hostは、スクリプ

    Windows Script Hostは、スクリプト言語なのでしょうか? Sub Sample() Dim WSH As Variant Set WSH = CreateObject("Wscript.Shell") Debug.Print WSH.SpecialFolders("Favorites") Set WSH = Nothing End Sub このようなコードでVBAでWSHを使っていますが WSHが何なのかわからないまま使っています。

  • ExcelVBA 他のアプリケーションを開く2

    こんにちは! これは、セルに書いてあるファイルの絶対パスを読み取り、そのファイルを開くというマクロです(前に質問した時の回答抜粋です) Set WSH = CreateObject("WScript.Shell") If TypeName(Target) = "Range" Then flName = Target.Value WSH.Run flName ・・・(1) End If (1)の部分で、ファイルの絶対パスに空白が含まれる場合、エラーになって開けません・・・(Documents and Settingsのように) 回避する方法はないでしょうか?

  • WSH(VBScript)でアプリケーションを停止したい

    こんにちは。 OSはWIN2K、WSH5.6を使用しています。 WSH(VBScript)で「c:\abc.exe」という アプリケーションを起動してます。 このアプリケーションは複数起動できな いためパラメータを変え連続3回Runメ ソッドで起動しました。 しかし一番最初に起動したものが落ちて いないため2本目以降は起動しません( 1本終わったら閉じるボタンでそのアプ リケーションを終了させると2本目以降 も起動します)。 タスクマネージャーのプロセスにも abc.exeがでていますので2、3本目の 起動前にこれを停止させるスクリプトを 記述したいのですが、どなたかご教授い ただけますでしょうか。 よろしくお願いいたします。

専門家に質問してみよう