Processクラスにプロセスが割り当てられているか
投稿者 葉月  ()
投稿日時
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
メモ帳の起動と終了を行うだけの単純なサンプルコードを書きました。
ボタンを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/27 16:20:00
回答ありがとうございます。
ローカルのプロセスです。
普通に起動・終了する方法はわかるのですが、
Killメソッドを実行する際に、
Startメソッドを指定していなく、
プロセスが割り当てられていないため
例外が発生します。
通常、
「Startメソッド」
↓起動
「Killメソッド」
↓終了
となりますが、今回の場合
通常、
「Startメソッド」を実行していないかも
↓起動 していないかも
「Killメソッド」 ここで例外が発生するので
↓終了 起動しているかチェックしたい
のです。
わかりにくいのですがお願いします。
ローカルのプロセスです。
普通に起動・終了する方法はわかるのですが、
Killメソッドを実行する際に、
Startメソッドを指定していなく、
プロセスが割り当てられていないため
例外が発生します。
通常、
「Startメソッド」
↓起動
「Killメソッド」
↓終了
となりますが、今回の場合
通常、
「Startメソッド」を実行していないかも
↓起動 していないかも
「Killメソッド」 ここで例外が発生するので
↓終了 起動しているかチェックしたい
のです。
わかりにくいのですがお願いします。
投稿者 魔界の仮面弁士  ()
投稿日時
2008/7/27 22:28:00
>>3
Start が呼ばれなかった場合、Process 型の変数に
格納されているのは、
・未設定(Nothing)
・前回の Start によって呼ばれたプロセス
のいずれかという事になりますよね。
前者だけなら Nothing 判定だけで済みますが、後者も
ありえるのならば、自身で判定基準を組む事になるかと。
で、Start は自動的に呼び出されているわけではなく、
temp さん自身が書いたコードによって呼ばれるのですから
たとえば Start 処理の部分を通過したかどうかを、別の
Boolean 変数等で管理しておけば、チェックできますよね。
Start が呼ばれなかった場合、Process 型の変数に
格納されているのは、
・未設定(Nothing)
・前回の Start によって呼ばれたプロセス
のいずれかという事になりますよね。
前者だけなら Nothing 判定だけで済みますが、後者も
ありえるのならば、自身で判定基準を組む事になるかと。
で、Start は自動的に呼び出されているわけではなく、
temp さん自身が書いたコードによって呼ばれるのですから
たとえば Start 処理の部分を通過したかどうかを、別の
Boolean 変数等で管理しておけば、チェックできますよね。
投稿者 葉月  ()
投稿日時
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
私の作ったサンプルコードも書き換えます。
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
投稿者 temp  ()
投稿日時
2008/7/28 01:21:00
魔界の仮面弁士さん、葉月さんありがとうございます。
フラグで判断することにしました。
フラグで判断することにしました。
プロセスを終了したいです。
プロセスが無いと、オブジェクトが割り当てられていませんとか表示されるのでどうすればいいか悩んでいます。