vs2005 VBで以下のプログラムを書いています。やりたいことはNOTEPADが起動しているかどうかをしらべて起動していたら処理をするものです。しかし、HASEXISTEDで実行エラーとなります。


どうしてでしょうか?

Dim myProcesses() As Process

myProcesses = Process.GetProcessesByName("notepad")
If myProcesses(0).HasExited Then <=ここでエラー
notepadが存在していたら何らかの処理をする
Else
存在してなかったらなにもしない
End If

NOTEPADが立ち上がった状態で実行して以下のエラー

'System.IndexOutOfRangeException' のハンドルされていない例外が XXX.exe で発生しました。

追加情報: インデックスが配列の境界外です。

回答の条件
  • 1人2回まで
  • 登録:2009/11/15 01:59:34
  • 終了:2009/11/15 03:31:01

ベストアンサー

id:freemann No.2

freemann回答回数309ベストアンサー獲得回数502009/11/15 02:18:40

ポイント46pt

それは、戻っている配列の長さが0の時があるからです。

次のようにしてみるとわかります。

Dim myProcess As Process() = Process.GetProcessesByName("notepad")

If myProcess.Length > 0 Then

Console.ReadLine()

If (myProcess(0).HasExited) Then

Console.WriteLine("OK")

End If

Console.WriteLine(myProcess.Length.ToString())

End If

Console.ReadLine()

その他の回答(1件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012009/11/15 02:25:38

ポイント24pt

If myProcesses(0).HasExited Then

ではなくて、

If Not notepad.HasExited Then


今回だけでなく、既に解決している前回の質問にも関連するのですが、

プロセスの管理 から

以下のリンク先を参照し、順を追って確認してみてください。

方法 : プロセスを指定する

方法 : プロセスを停止する

方法 : プロセスが応答しているかどうかを確認する

方法 : プロセスが終了したかどうかを確認する

方法 : 動作中のプロセスを表示する

方法 : プロセスが動作を完了するまで待つ

id:freemann No.2

freemann回答回数309ベストアンサー獲得回数502009/11/15 02:18:40ここでベストアンサー

ポイント46pt

それは、戻っている配列の長さが0の時があるからです。

次のようにしてみるとわかります。

Dim myProcess As Process() = Process.GetProcessesByName("notepad")

If myProcess.Length > 0 Then

Console.ReadLine()

If (myProcess(0).HasExited) Then

Console.WriteLine("OK")

End If

Console.WriteLine(myProcess.Length.ToString())

End If

Console.ReadLine()

コメントはまだありません

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません