Back to Top

プログラムの覚書

Category: プロセス

VB.NET起動した外部アプリケーションの終了判断する

アプリケーションが終了したかどうかを判断する

System.Diagnostics.Processクラスで起動したプログラムを、呼び出し側で終了したか確認する方法を説明します。
プロセスのインスタンスの、HasExitedプロパティを使用します。
HasExitedプロパティは、プログラムが終了している場合はTrueです。

HasExitedプロパティによる判断

'アプリケーションを起動して、Processのインスタンスを取得する
Dim hPros As System.Diagnostics.Process = System.Diagnostics.Process.Start("Notepad")

'5秒ほど待機する(この間に起動したアプリケーションを終了させてください)
System.Threading.Thread.Sleep(5000)

'起動したプログラムが終了したかどうかを判断する
If hPros.HasExited Then
    MessageBox.Show("終了しています")
Else
    MessageBox.Show("終了していません")
End If

'不要になった時点で破棄する
hPros.Close()
hPros.Dispose()

 

アプリケーションが終了したことをイベントで通知する

System.Diagnostics.Processクラスで起動したプログラムを、呼び出し側で終了をイベントで確認する方法を説明します。
プロセスのインスタンスの、EnableRaisingEventsプロパティを使用します。
EnableRaisingEventsプロパティを Trueにし追加したイベントを呼び出します。

イベントハンドラによる終了判断

'アプリケーションを起動して、Processのインスタンスを取得する
Dim hPros As System.Diagnostics.Process = System.Diagnostics.Process.Start("Notepad")

' このプログラムが終了した時に Exited イベントを発生させる
hPros.EnableRaisingEvents = True

'Exited イベントハンドラを追加する
AddHandler hPros.Exited, AddressOf Prog_Exited
'アプリケーションが終了したことを通知するイベント
Private Sub Prog_Exited(ByVal sender As Object, ByVal e As System.EventArgs)
    MessageBox.Show("終了しました")
End Sub

 

VB.NET起動した外部アプリケーションを終了する

外部アプリケーションを強制終了する

System.Diagnostics.Processクラスで起動したプログラムを、呼び出し側から強制終了する方法を説明します。
強制終了にはKillメソッドを使用します。

Killメソッドによる強制終了

'アプリケーションを起動して、Processのインスタンスを取得する
Dim hPros As System.Diagnostics.Process = System.Diagnostics.Process.Start("Notepad")

'3秒ほど待機する
System.Threading.Thread.Sleep(3000)

'プロセスを強制終了する
hPros.Kill()

' 不要になった時点で破棄する
hPros.Close()
hPros.Dispose()

 

外部アプリケーションのメインウィンドウを閉じて終了する

System.Diagnostics.Processクラスで起動したプログラムを、呼び出し側から終了する方法を説明します。
アプリケーションを終了させるにはCloseMainWindowメソッドで、クローズメッセージを送信します。
CloseMainWindowメソッドは失敗した時にFalseを返しますので、失敗した際もは、Killメソッドで強制終了を行います。

CloseMainWindowメソッドで終了する

'アプリケーションを起動して、Processのインスタンスを取得する
Dim hPros As System.Diagnostics.Process = System.Diagnostics.Process.Start("Notepad")

'3秒ほど待機する
System.Threading.Thread.Sleep(3000)

'クローズメッセージを送信する
If hPros.CloseMainWindow() = False Then
    hPros.Kill()         '終了しなかった場合は強制終了する
End If

' 不要になった時点で破棄する
hPros.Close()
hPros.Dispose()