Processクラスにプロセスが割り当てられているか への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 temp  () 投稿日時 2008/7/28 01:21:00
魔界の仮面弁士さん、葉月さんありがとうございます。 
 
フラグで判断することにしました。
投稿者 葉月  () 投稿日時 2008/7/28 00:43:00
魔界の仮面弁士さんの説明で十分理解できますが、 
私の作ったサンプルコードも書き換えます。 
 
 
Public Class Form1 
 
    Dim instProcess As Process   'プロセス用の変数 
    Dim flgProcess As Boolean = False 'プロセス判別 
 
 
    ''' <summary> 
    ''' メモ帳を起動するボタン 
    ''' </summary> 
    Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click 
        instProcess = Process.Start("notepad.exe") 
        flgProcess = True 
    End Sub 
 
 
    ''' <summary> 
    ''' メモ帳を閉じるボタン 
    ''' </summary> 
    Private Sub btnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnd.Click 
 
        If flgProcess Then 
            instProcess.Kill() 
            flgProcess = False 
        Else 
            MessageBox.Show("プロセスは割り当てられていません") 
        End If 
 
    End Sub 
 
End Class
投稿者 魔界の仮面弁士  () 投稿日時 2008/7/27 22:28:00
>>3 
Start が呼ばれなかった場合、Process 型の変数に 
格納されているのは、 
 ・未設定(Nothing) 
 ・前回の Start によって呼ばれたプロセス 
のいずれかという事になりますよね。 
 
前者だけなら Nothing 判定だけで済みますが、後者も 
ありえるのならば、自身で判定基準を組む事になるかと。 
 
 
で、Start は自動的に呼び出されているわけではなく、 
temp さん自身が書いたコードによって呼ばれるのですから 
たとえば Start 処理の部分を通過したかどうかを、別の 
Boolean 変数等で管理しておけば、チェックできますよね。
投稿者 temp  () 投稿日時 2008/7/27 16:20:00
回答ありがとうございます。 
 
ローカルのプロセスです。 
 
普通に起動・終了する方法はわかるのですが、 
Killメソッドを実行する際に、 
Startメソッドを指定していなく、 
プロセスが割り当てられていないため 
例外が発生します。 
 
通常、 
「Startメソッド」 
   ↓起動 
「Killメソッド」 
   ↓終了 
 
となりますが、今回の場合 
通常、 
「Startメソッド」を実行していないかも 
   ↓起動   していないかも 
「Killメソッド」 ここで例外が発生するので 
   ↓終了   起動しているかチェックしたい 
のです。 
 
わかりにくいのですがお願いします。
投稿者 葉月  () 投稿日時 2008/7/27 07:59:00
ローカルのプロセス操作でよろしいですか? 
メモ帳の起動と終了を行うだけの単純なサンプルコードを書きました。 
ボタンを2つ用意して、以下の名前を使って記述してください。 
 
Public Class Form1 
 
Dim instProcess As Process 'プロセス用の変数 
 
''' <summary> 
''' メモ帳を起動するボタン 
''' </summary> 
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click 
instProcess = Process.Start("notepad.exe") 
End Sub 
 
''' <summary> 
''' メモ帳を閉じるボタン 
''' </summary> 
Private Sub btnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnd.Click 
instProcess.Kill() 
End Sub 
 
End Class 
 
サンプルコードを見てもらえるとわかりますが、プロセスの起動がstartメソッド、終了がkillメソッドで行っています。 
以下に参考ページを記載しますのでご確認ください。 
 
>Process.Startメソッド 
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.start%28VS.80%29.aspx 
 
>Process.Killメソッド 
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.kill%28VS.80%29.aspx
投稿者 temp  () 投稿日時 2008/7/26 18:59:00
Processクラスにプロセスが関連付けられているときのみ 
プロセスを終了したいです。 
 
プロセスが無いと、オブジェクトが割り当てられていませんとか表示されるのでどうすればいいか悩んでいます。