Windows 有一个不太为人所知的注册表项 BrowseNewProcess,它可以将 Windows Shell 进程 Explorer.EXE 与 IE 浏览器的进程 IEXPLORE.EXE 合并在一起。之所以说这个注册表项不太为人所知是因为我们在微软 KB 知识库中几乎搜索不到有关 BrowseNewProcess 的说明,但是在实际应用中,却有非常多的 IE 相关故障都是由 BrowseNewProcess 引起的。以下四则故障都是笔者最近在微软新闻组及微软中文技术论坛中见到被人频繁问起的:

故障 1. 启动 IE 浏览器后在任务管理器的“进程”列表找不到 IEXPLORE.EXE 进程,但 IE 浏览器确实已经启动。无论我们打开多少个 IE 窗口或者多少个 IE 标签(IE 7/8 Beta 2),都无法看到运行中的 IEXPLORE.EXE,反倒是 Explorer.EXE 进程的内存占用率一再飙升。

故障 2. 在已经安装了 IE 7/8 Beta 2 的 Windows XP 系统中,IE 6 理论上已经被 IE 7/8 取代。但有时通过开始菜单打开 Windows Update 时,弹出的却不是带有标签的 IE 7/8 窗口,而是没有标签的 IE 6 窗口;或者,当有时在某些应用软件中点击一个链接时,弹出的也不是 IE 7/8 窗口、而是一个空白的 IE 6 窗口。这个问题曾被问起过不止十次,很多人将其奇怪地形容为“IE 7/8 与 IE 6 可以共存”。

故障 3. FlashGet、迅雷等网络下载工具可以通过右键菜单直接右键单击下载链接进行下载,但是在某些计算机中这些下载软件的右键菜单突然失效,即使重新安装相应的下载软件多次也无法解决。

故障 4. 某些网站应用了 ASP.NET 应用程序、通过 Session 保存用户的登录状态及相关信息(注意这里不是简单的通过 Cookies 保存用户登录信息)。按照常规的设计,用户在登录后只要关闭了浏览器窗口一段时间,之前登录的信息就将过期,用户重新访问这个页面时必须重新进行登录。但在出现故障的计算机中,即使用户已经关闭了浏览器很长时间,再次打开指定的页面时发现登录信息依然被保留。

以上四种故障都是因为设置了 BrowseNewProcess 引起的。我们可以打开注册表编辑器,定位到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\BrowseNewProcess 以及 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\BrowseNewProcess(前者对所有用户帐户生效、后者只对当前用户帐户生效),修改字符串值 BrowseNewProcess,将其值设置为 yes 表示为 IE 浏览器使用单独的进程;将其设置为 no 则表示将 Explorer.EXE 与 IEXPLORE.EXE 进程合并。

之前所述的四个故障都是因为 BrowseNewProcess 被设置为 no 所致。
 
由于 Explorer.EXE 与 IEXPLORE.EXE 进程合并,所以无论我们启动多少个 IE 窗口或标签,都只会叠加在 Explorer.EXE 进程上面、不会出现 IEXPLORE.EXE 进程,因此出现故障 1;
 
Explorer.EXE 做为 Windows 系统外壳,它与 Windows XP 自带的 IE 6 是紧密相连在一起的,故障 2 中点击链接后出现的空白的 IE 6 窗口,实际上那也不是真正的 IE 6 窗口,而是一个 Explorer.EXE 资源管理器窗口,因此出现故障 2;
 
FlashGet、迅雷等网络下载工具由于只能识别 IE 浏览器的进程 IEXPLORE.EXE,不能识别 Explorer.EXE,所以当出现故障 1 时,这些下载工具的右键菜单自然无法生效,因此出现故障 3;
 
至于故障 4,由于我们关闭浏览器后 Explorer.EXE 依然还在运行(因为 Explorer.EXE 同时也是 Windows Shell 进程),所以浏览器的进程等于还没有关闭,因此出现下一次访问页面时依然保存用户登录信息的故障 4。

所以我们只要将 BrowseNewProcess 修改为 yes,令 Explorer.EXE 与 IEXPLORE.EXE 进程分离,上述的故障就都可以迎刃而解了。