Usa la Class 'Process', establece la propiedad 'WindowStyle' (siempre que la ventana del proceso lo permita), y suscríbete al evento 'Exited'.
Ejemplo:
Public Class SetUp_v101
Dim psi As New ProcessStartInfo With
{
.FileName = IO.Path.Combine(Application.StartupPath, "SetUp_v100001.exe"),
.WindowStyle = ProcessWindowStyle.Maximized
}
Dim WithEvents p As New Process With
{
.StartInfo = psi,
.EnableRaisingEvents = True
}
Private Shadows Sub Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Load
Using proc As Process = p
proc.Start()
proc.WaitForExit()
End Using
End Sub
Private Shadows Sub FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) _
Handles MyBase.FormClosing
Select Case e.CloseReason
Case CloseReason.ApplicationExitCall
' Esto sucede cuando el usuario cierra el proceso que hemos ejecutado, en la llamada 'Application.Exit()'.
Case CloseReason.UserClosing
If AskQuestion() = Windows.Forms.DialogResult.No Then
e.Cancel = True
Else
If Not p.HasExited Then
p.Kill()
End If
End If
End Select
End Sub
Private Sub p_Exited(sender As Object, e As EventArgs) _
Handles p.Exited
Application.Exit()
End Sub
Private Function AskQuestion() As DialogResult
Return MessageBox.Show("Realmente desea salir?", "Finalizar SetUp",
MessageBoxButtons.YesNo, MessageBoxIcon.Question)
End Function
End Class
PD: Las dudas sobre .NET van en el subforo dedicado a .NETSaludos!