人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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 で発生しました。

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

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
✍キーワード:as exe VB いるか インデックス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kn1967
●24ポイント

If myProcesses(0).HasExited Then

ではなくて、

If Not notepad.HasExited Then


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

プロセスの管理 から

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

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

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

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

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

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

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


2 ● freemann
●46ポイント ベストアンサー

それは、戻っている配列の長さが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()

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ