Public Class Form1
Dim myapp As String = "excel.exe"
'Dim myapp As String = "notepad.exe"
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim p As New System.Diagnostics.Process()
p.StartInfo.FileName = myapp
p.Start()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim p As New System.Diagnostics.Process()
p.StartInfo.FileName = myapp
p.Start()
p.WaitForExit()
MsgBox("完了")
End Sub
End Class
Button1はexcel.exeまたはnotepad.exeを起動します。
Button2はexcel.exeまたはnotepad.exeを起動して
そのプロセスが終了したら完了のメッセージボックスを表示します。
実行環境 : Win10 + Office2016 + VB2017
上記のプログラムを実行すると次のような動きになります。
A)Button1を押すと、excel.exeが起動します。
→問題なし。
Aで起動したエクセルを終了します。
B)Button2を押すと、excel.exeが起動し、WaitForExitで待機状態となります。
エクセルを終了すると完了のメッセージボックスが表示されます。
→問題なし。
C)Button1を押して、excel.exeを起動します。
エクセルが起動している状態で、Button2を押します。
エクセルが2つ表示された状態になりますが、
その状態で完了のメッセージが表示されてしまいます。
→なぜかWaitForExitが働いていない状態。
Cのケースでも、2つ目に起動したエクセルが終了するまで
WaitForExitで待機状態にすることはできないでしょうか?
ちないみに、コメントアウトしているnotepad.exeの方で試すと、
Cのケースも問題なく待機状態となります。
ちなみに、
Win7 + Office2010 + VB2010 の環境で同じプログラムを実行すると
excel.exeもnotepad.exeも
Cのケースでも問題なく待機状態となります。