The symptoms of my problem:
- Attempt to launch a new page/web-app in a separate iexplore.exe process for Internet Explorer
- The process launches successfully but very quickly exits with rc=0.
- A new iexplore.exe is created that is not a child of the process I created, but of another existing Internet Explorer session.
- The requested content appears successfully under that other process
- My process/handle management logic is confused since it thinks something is broken!
After a brief amount of research, it turns out this is due to a change in Internet Explorer 8 (IE8) regarding how UI components, frames, tabs, and plug-ins are isolated into different processes. This is called "loosely-coupled Internet Explorer" or LCIE, and this is documented in two MSDN IE blog posts from Microsoft:
- http://blogs.msdn.com/b/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx
- http://blogs.msdn.com/b/askie/archive/2009/03/20/how-to-i-determine-which-ie-tabs-go-to-which-iexplore-exe-process-when-using-internet-explorer-8.aspx
While these changes are very useful from an end user point of view, for security and robustness reasons, they aren't what I need. Thankfully, Microsoft included a way of avoiding some aspects of this change in IE8 to mimic the process behaviour of previous versions:
The simple solution:
When manually launching an iexplore.exe process, add the following "-nomerge" command line option as part of the request.
"iexplore.exe -k -nomerge C:\path\app\index.html"
Once I modified my process manager to use this option, my existing logic that worked fine under IE6 and IE7 also works with IE8!