' If this is the default If nTimeout = 0 Then ' Wait for the process to complete before proceeding loProcess.WaitForExit() ' Do some code Else ' Wait for the process to complete before proceeding ' If the timeout occured before it finishes, lTimeout will be True If loProcess.WaitForExit(nTimeout * 1000) Then ' Do some code Else lTimeout = True loProcess.CancelOutputRead() loProcess.CancelErrorRead() loProcess.Kill() End If End IfThe process works. If I pass a timeout value, it will go in the Else with a WaitForExit() with a timeout. If the processes finishes ok, all is ok. If the process finishes due to the timeout, it will go in the Else and will kill the application. At least, this is what it should do. But, the application remains in memory. loProcess.Kill() should terminate the EXE in memory. But, it does not.