First off (as always), reconsider your need for a notification area handler. Seriously consider if it's appropriate for your application to have a notification area handler. Do you really believe that it provides sufficient functionality to justify taking up limited notification area real-estate? Really?
From what I've seen, some notification area handlers are quite well thought out and provide easy access to useful information or commonly accessed functionality (the volume, clock, taskmgr, "safely remove hardware" and RSS Bandit are ones come to mind). Some have questionable value (the network and outlook handlers come to mind), some just don't seem to make sense at all (Quicktime and handlers like the various display driver and printer control panel notification area handlers). After all, do think that your customers really need to know how much ink remains in their printer all the time?
As I've mentioned in earlier articles, you should always have a mechanism for disabling your notification area handlers - it's just polite (and if you don't, your customer's are going to find other ways of disabling your notification area handlers). Since you're building a mechanism to disable your notification area handler, why not specify it as a checkbox in your installer? That way your customer never gets annoyed in the first place. In addition (and I've also mentioned this before), make sure that your notification area handler is instanced on a per-user basis. That way you (a) don't require elevation to disable your notification area handler, and (b) you let the various users of the computer make a choice - some may choose to use your applet, others may not.
If you've decided that you MUST have a notification area handler, then why chew up an entire process to handle it? Windows offers a number of mechanisms to let you reduce the impact of your handler (it doesn't remove the impact, just reduces it). For instance, you can use the task scheduler (mentioned earlier in my post about updaters) facility to launch your notification handler upon user logon - that provides a centrally manageable interface to allow for task control. On Vista, you can define your task as firing a COM handler, in which case your applet gets launched in a hosting process - that means that instead of having a dedicated process, you live in a process that's shared with other jobs (including other notification area handlers).
One final thing about notification area handlers: If you don't have anything to say, shut up :)! People get really annoyed by notification area icons, one way to reduce their ire is to simply not register an icon unless you have something to say. You can see the effect of this with Windows Defender - they only insert their notification area icon if they need to alert the user, otherwise they're mute. There's a huge caveat with this though: adopting this behavior can have unintended consequences. When the Defender team adopted this behavior (only showing the icon if there was a problem), they received a flurry of complaints from users because they felt that if the icon wasn't present, defender somehow wasn't working. As a result of this, the defender team added an option (off by default) to add their icon in the notification area all the time. Personally, I think that people believe this way because they've been conditioned by poorly written notification area handlers so that they believe they're not protected unless they see the little icon, even though the icon has nothing to do with their protection level.
Next: Mitigations for services.
 As always, please remember my definition of crap: "Crap is defined as stuff I don't want running on my machine" - you may very well disagree with my opinions about the relative usefulness of the various applets I've listed above.
Personally I don't really care whether an applet is causing a dormant process to sit around, the memory/cpu power available on a modern desktop is more than capable of dealing with that. I do however care much more about my screen real estate. I don't want anything displayed permanently on my screen that I can either get elsewhere, like wallclock time, which I can get from my wristwatch, or that I use infrequently, like a volume control (which I set once and then use the hardware volume on my speakers).
If anybody from the OneCare team is reading this perhaps you would like to follow the Defender approach and allow me to configure your app so that I can tell it to only display the icon if the status is not green. Right now I have your notification icon set to "Always Hide" so if it does turn yellow or red someday I won't know until I go into OneCare to kick off a backup.
As for the task scheduler, not everybody leaves their PC on 24/7 and IIRC there was no way to tell the XP task scheduler to run a job that was missed as a result of the computer being off. I think that was fixed that for Vista but it made the task scheduler less than useful for updater programs running on XP.
> Do you really believe that it provides sufficient functionality
> to justify taking up limited notification area real-estate?
Sorry if it looks like I'm bugging you too much about the language bar, which isn't your doing. I understand that you agree with me on this point, and I agree with you. I'm thanking you again for your understanding. I'm begging you again to please try to teach your colleagues. The language bars in IME 97 through IME 2000 minimized to a single icon in the notification area, and a right-click on that icon could bring up every menu. It used to be done right. Please teach your colleagues to stop breaking stuff that worked.
> questionable value (the network
Well, I understand that some users don't need the network icon, and having an option for it is the right thing to do. But I sure do value that icon. On dial-up I want to know if a pay-by-the-second connection is active. On some kinds of funny hardware I want to know if the connection to the hardware is working. And on the other hand, if a hub goes down, I appreciate seeing the disconnection icon too.
Norman, I despise the language bar, it's one of the first things I turn off on a new installation. It's a great example of one of those items of "questionable value" I mentioned above.
To be fair to the languages guys, they've got a discoverability problem, which is a common problem - you've got this really useful feature that will be a significant benefit for some subset of your customers, how to you let them know about it?
It's a tough problem.
Yes. The Language Bar icon (Or "panel" I should say) is very important to we Chinese users, who have a number of different input method (Even for the most common ones, we have 2 version of Changjei, 2 version of Phonetics, plus Quick, Cantonese phonetics, 9-Square, etc. All have their significant number of users) to be selected all the time (Especially when the machine is a public one like those in the public library, they have 9 kind of IME always available all the time since the age of DOS with ETen Chinese Environment). It's important for us to know what input method is currently effective and enable us to quickly switch between them.
And then, there are old applications which switches IMEs. I've seen one application which will disable IME on the numeric fields, then switch the IME to Changjei if available if focus is on normal textbox, regardless of which IME the user originally selected. :O
Taking it away by default would damage Chinese users. (And yes, some of us prefer English version of Windows more than Chinese version, especially because in Vista it includes the "Pearl" feature. We found typing in keywords in English has higher "hit rate" then typing in Chinese in Chinese version)
Cheong: Yup - as I said, the language bar has several very important constituancies who <i>need</i> this functionality, yet to the rest of the world, it's just an annoyance.
I wasn't joking when I said it was a tough problem. It would be... unwise... to alienate more than a billion potential customers, yet it annoys the heck out of the remaining customers.
I suspect that it's the best trade-off between discoverability and annoyance that we're likely to get (which is why it's still there in Vista with more-or-less the same user experience).
If memory serves me right, the language bar will not be displayed by default if there's only one input language and keyboard layout installed, which should be default for most Windows versions (strangely it's not for the Dutch version; that insists on installing both the Dutch and US International layouts, even though I've only seen one Dutch layout keyboard in my entire life so they're hardly common).
I'm not entirely sure since I always have it sitting around for when I need to use Japanese input. :)
one exception to the rule you mention above.
>> For instance, you can use the task scheduler (mentioned earlier in my post about updaters) facility to launch your notification handler upon user logon
Even this must be used with the greatest of care. The Operations guys here decided this would be better than all the applets a user has to deal with and so they decided to do this for everything. What we ended up with was 20-30 minute boot times, user complaining, never rebooting, etc. When patches were pushed out through MOM users would see the prompt pop up telling them they needed to reboot with nothing but an OK button which would reboot them, and since we didn't force reboot in fear of someone loosing something they were working on, users would just drag the you need to reboot prompt out of thier way and continue to work sometimes weeks before rebooting.
Also you have to be careful of the ones at shutdown, after that fiasco of at startup somone got the bright idea to do things before shutdown. Yeah right when a user shuts down they want to go home they might be running late for thier kids plays or a million other things people do outside of work. So when people shut down and it came us and said please wait installing patch 1 of 13, people just pulled the plug, even pulled batteries out of thier laptop to get it to stop so they could just go home.
Sven, XP enabled the language bar all the time (I know, I just flattened my wife's old laptop).
Vista may have changed this to only enable the language bar on languages where it makes sense.
The language bar is often critical to anyone outside the US. Personally I need to switch between french and english all the time, specially to easily access backslashes. All programmers do this, and many normal users as well. It only shows up if you've installed more than one input language.
How don't know if it's changed in Vista, but once you loose by mistake the language in XP, it's realllly hard to find how to get it back, and that's pretty much a show stopper when that happens.
"Since you're building a mechanism to disable your notification area handler, why not specify it as a checkbox in your installer? That way your customer never gets annoyed in the first place."
that's pretty ridiculous...:D At that point in time NO USER knows what that option means and is not prepared to take the decision. This would only be convenient for a couple of power users in the world would would guess what it means, or remember from the last time, a complete edge case. Installers should have almost no options. Disabling the notification should be in the context of where it appears. The usability challenge is how to get it back.
Ulric: About the checkbox. Actually many apps I install give me a checkbox to put an icon on the desktop, the quicklaunch area or the notification area. That way the user never gets bothered. Users might blow past that screen, that's ok.
> Norman, I despise the language bar, it's one of the first things
> I turn off on a new installation.
Well that's hardly a solution, and not what I was suggesting.
It's laughable that Windows XP and a few other recent versions allow text services to be turned off, so that users will be unable to input the language of their country and the default language of their Windows system. In comparison, one of the few things that Windows 95 got right was that it didn't allow deleting the last remaining IME that would be needed to input the language of the Windows system.
The language bar used to be minimizable to 1 icon in the notification area. That was the right number of icons. Not 4, not 5, not 0.
In Windows 95 you had to install IME 97 or later in order to be capable of minimizing the language bar.
By the way on another issue:
> a flurry of complaints from users because they felt that if the
> icon wasn't present, defender somehow wasn't working
There is a good historical reason for this. Sometimes the first indication a person would get about a crash of their antivirus program or firewall would be that they suddenly noticed the relevant icon was missing. XP SP2's security centre has its own icon to make that redundant.
In previous articles, I've pointed out: Programmer Hubris - He's just not that into you Programmer
I've written to a few companies asking for them to make their icons optional. Most of the time people write back saying that I should use the "hide inactive icons" feature of the taskbar but that sucks for two reasons:
1) It doesn't work very well and often gets confused about which apps/icons it is meant to be showing or hiding all the time. I don't know exactly how the mechanism works but when I upgrade the .exe for one program that I want always shown it often gets reset to "hide when inactive" an I have to go back in and change the settings yet again. Other programs which change their icon or tooltip often also seem to confuse the taskbar. As a result, I would much rather not use the "hide unused icons" feature at all.
2) There are some icons which I have chosen to hide but still use occasionally (for example, Safely Remove Hardware (see below), and Messenger). There are other icons which I never want to see again in my life. When I click the taskbar arrow to show all icons the useless icons get in the way of quickly finding the useful icons.
In Vista the SideBar is the worst example of this and there's no way to hide its stupid icon. (Only useful thing it does is let you bring he SideBar to the front, which I have never wanted to use and never will want to use.)
The NOD32 anti-virus program has a tray icon that cannot be hidden via its options. If you hide it using the taskbar's settings then the tray icon breaks completely, no longer shows alerts and can no longer be clicked to launch anything. Wonderful. Windows already alerts me if my A/V signatures are out of date so I don't need that thing's icon wasting space.
Safely Remove Hardware is nice, except that with some SATA drivers all of your harddrives are considered hotplug (like I'm about to open my PC up and unplug the system drive!) and there's no way to exclude them, so I *always* have that icon there with options which allow me to at least attempt to do something catastrophic. The system drive will always be in use but if I accidentally disconnect a data drive then I would have to reboot to get it back.
Outlook 2007 shows a new mail icon only when there is new mail. It's also optional. That's all good, except the stupid program also shows another icon all the time which doesn't indicate status and only seems to exist in order to provide about five settings via a menu. Unfortunately they are settings which one would very rarely want to change (and could do so via the Tools -> Options dialog) so the icon is absolutely useless yet mandatory. Sigh.
Final point in reply to the idea of a checkbox during installation: I think it's a good idea. If you're new to the app then you can keep the defaults, see if the icon is useful, and disable it via an Options dialog if it isn't. The important thing is that people installing your software have often used it before and are installing an update or on a new machine. Giving them a quick way to not be bothered by the icon is a good thing.
Leo, that's a shame, because hiding the icons using the shell is like painting over water damage - it may hide the issue, but it doesn't fix the root cause.