Please read my blog's comment policy here.
As browser users go, I’m pretty savvy. I’ve been on the IE team for nearly half a decade, and I’ve been writing browser extensions for twice as long. I read networking source code for entertainment, I spend my free time writing a web debugger, and I maintain an IE troubleshooting guide for folks who encounter common problems.
Earlier this week, IE8 started hanging on a regular basis (on every 3rd or so startup) on one of my computers. There was no obvious rhyme or reason to the hangs; they'd happen when I opened a new tab or a new window, whether I clicked on a link from Outlook or ran iexplore.exe directly.
Now, as some of you know, when folks complain about IE crashes, the first thing I do is tell them to try running in No Add-ons mode. However, forgetting my own advice (because I didn’t recall installing anything lately), I didn’t think to try that. Instead, I saved some WinDBG .dmp files to debug later, and just let my frustration build.
Luckily, however, I soon encountered a previously unseen dialog box:
This is a new dialog box, introduced in IE8 to help prevent “Search Hijacking”—when a piece of software stomps over an unwilling user’s preferences and sets itself as the search provider. (You can learn more about Search Provider Protection in Frank Olivier’s blog post on the IEBlog.)
In this case, the dialog indicates that my default Search Provider had been changed by overwriting registry keys rather than using the API to request a change to the search provider. In turn, this was a clue that some program I’d installed was making unwanted changes to my browser. I chose to “Keep” my existing search provider using this screen, but decided to investigate how my search default was being changed.
Unfortunately, while there’s no good way for this dialog to pin blame on the hijacker, I knew that it was being triggered by new software on my computer, because I hadn’t seen this prompt over the last 18 months. This prompted me to remember that I’d recently updated my copy of WebShots Desktop, a program which periodically cycles my desktop wallpaper among various high-quality landscape scenes. (While Windows 7 natively includes a wallpaper-rotation feature, I use WebShots on the Windows XP machine I use for downlevel testing).
I was almost positive that I’d opted-out of all of the browser integration features offered by the installer, but concluded that perhaps I missed one. I took a quick look inside IE’s Tools > Manage Add-ons dialog, and sure enough, I saw an unexpected add-on:
The new DLL in the list, AGCore.dll, was installed by the new version of the wallpaper-changing program. (Confusingly, the DLL has the same name as the core DLL in Microsoft Silverlight, although it has nothing to do with Silverlight). I used Manage Add-ons' Disable button to turn off the agcore.AGUtils add-on, and restarted IE. Sure enough, the crashes and hangs went away.
Curious about why this add-on was causing such problems, I took a quick look at it. It turns out that agcore.dll is a .NET Assembly which is exposed as a COM object, registered as a Browser Helper Object in IE.
I strongly discourage use of .NET to build IE extensions (for anything other than prototyping purposes), because .NET is not suitable for this use, as briefly outlined over on Raymond Chen’s blog. Beyond the framework-versioning problems, .NET incurs a significant performance cost at startup, and users demand that IE and its tabs start instantly. Extensions written in .NET cannot meet the performance expectations of most users.
The whole experience was a painful reminder that even non-malicious code can ruin your day. If you encounter crashes, hangs, or other unexpected behavior in IE, your first stop should be the Manage Add-ons screen.
@EricLaw : My English may sound correct when you're reading me, but anyone who tries to listen to me in English can only have one reaction : the giggle. I have diffculties to wonder how I should say a word in spoken English. It's way different from what is wrotten. A single letter could have many different ways to be pronounced. Generally, my words end up in something that's neither understandable, neither understood. But it's always funny ! ;-)
For what's wrotten English, it's far easier to learn. When you're programmer, you find many more resources in English than in French. And it's the same for dev communities. So learning English seems natural.
BTW, I think I can remeber somethig to write .NET addons for IE. It's called SpicIE. I performs some components encapsulation and do the needed registry edits. For the rest, you simply need to add a reference to mshtml.tlb to use IE's interfaces. I've looked in the add-on handler of IE, it takes 0.3s to load my add-on. I must admit it's quite a lot regarding to the tab creating proccess.
BTW, I'm asking myself a question. Is it possible for IE to measure anormal IE performances and propose to the user to try to run IE in "No Add-on" mode to see if there's an Add-On performance issue ?
Many users (let's say 99%) are not aware of the No Add-On Mode, and/or don't have the reflex to think that an add-on could make IE slower. If the No Add-On mode don't solve the problem, maybe you could ask to send an error repport to IE (even if there's no error, just a slow browser; sometimes it's due to obscure hardware incompatibilities that could be fixed by updating a driver).
Does the addon manager not list hte performance cost of a .net plugin in the load time column ?
@hAl: I'm not entirely positive. The issue is that the "Load Time" column is a wrapper around a very specific part of the load path (including SetSite, where most addons do their work). I'm not sure when exactly the framework ends up getting loaded in the case where the addon is written in .NET and exposed as a COM object.
The other problem is that the .NET Framework load time is highly variable, depending on whether something else is already using it. So you'll have a big skew between the "average" and "max" load time.
New tab creation is still a hot item in IE8 critisisms and there seems little possibility to measure what things cause it.
p.s. The IEblog seems down
@hAl: With hundreds of millions of users, IE has all sorts of criticisms and hot items. :-)
As elaborated in my post on "Unshackling performance" there are a number of ways to measure performance of new tab creation and root cause problems with it, but yes, it's a pretty manual process. For the majority of users, trying IE with addons off is the simplest way to get started in the right direction.
I'm sure the IEBlog site will be back up shortly.
i do not write any of my own programs, etc...On my computer, under add/remove programs....i currently have installed [a lot of versions of the .NET framework. Is that okay?]
@Sandra: The .NET Framework is needed to run programs written by other developers. Even if you don't write programs yourself, you'll need it if you want to run any program which requires .NET.
I wrote a program to try to change the default search provider in IE9. The problem is when dialog pop up to let user choose if they want to change the default search provider, instead of showing that it's my program/vendor suggest the new default search provider, it shows that OLEAUT32.dll suggest the new default search provider. Could you shed some light of how to fix this and how does IE handle this dialog internally? Thanks
@Jenny: The proper approach is to call the IOpenServiceManager APIs described in this blog post: blogs.msdn.com/.../staying-in-control-of-your-default-search-provider.aspx