Should do a process kill in that case. While you can sometimes interact with applications opened before QTP/UFT it is not reliable. Need to open them after starting qtp/uft so that it gets its hooks into them properly.
It seems that doing the kill process at the start, and closing browsers created by the script as they are no longer needed, also at the end of the run for cleanup is the way to go.
I had to stop using kill process because one of the windows version didn't like it and the next time I opened a browser I got an error message about browser not being closed properly. Anyway, here is my function to close browsers.
Dim oDesc, x
On Error Resume Next
'Create a description object
Set oDesc = Description.Create
oDesc( "micclass" ).Value = "Browser"
'Loop through the collection and close each browser
If Desktop.ChildObjects(oDesc).Count > 0 Then
For x = Desktop.ChildObjects(oDesc).Count - 1 To 0 Step -1
Browser( "creationtime:=" & x ).Close