Jump to page content

Bug of the moment 2011-01-15

On vague errors, again

I was seeing the following error with any attempt to start Disk Defragmenter (dfrg.msc) on a particular Windows XP computer:

The root directory path to the snap-in file above is from where I copied over a working copy of file from my PC. I only did this to capture the error message for Bug of the Moment after I’d rebuilt the copy in system32, but it also rules out all of the suggestions made by the dialog box.

I followed a number of steps suggested to cure it, but to no avail. Instead, I started Microsoft Management Console directly by typing mmc, used Add/Remove Snap-in to attach the Disk Defragmenter snap-in, and saved the console back over the top of the original:

This is it working correctly on the computer in question; I cleaned up the console afterwards, although I never got it to look or behave exactly like the original:

What irks me about this whole episode is not that the console broke (it happens), or that it’s a common failing (that is life), but that Windows is incapable and unwilling to do anything about it. The problem with the console is impenetrable; there is absolutely no way to determine what the problem is, or what you’re supposed to do about it. Windows all but openly laughs in your face with “This may be because the file does not exist”; after all, it’s not hard for the computer to check this for you first.

The third suggestion is likewise trivial for MMC to test; you can demonstrate this by changing <MMC_ConsoleFile ConsoleVersion="2.0" ProgramMode="UserSDI"> to (for example) <MMC_ConsoleFile ConsoleVersion="9.0" ProgramMode="UserSDI"> in Notepad (it’s an XML file). This will throw up the same unhelpful error dialog.

Clearly, there is nothing wrong with Disk Defragmenter itself (it’s working, as seen in the screenshot above) and nothing wrong with the console file, as I get the same error from the copy that came off my computer. Unless of course, that copy wasn’t working for another reason, but how would I know? All errors lead to the same message.

Take for example the following error from BES:

Transaction error - failure at service

Research in Motion list no fewer than 10 separate causes for this vague and meaningless error. What transaction? Which service? What failed? How did it fail? The possible causes are so obviously unrelated; the handset may as well remark “have fun on your wild goose chase” beside the little red cross that displays next to the message. Not everyone has time to spend trawling through pages of suggestions in the hope that one of them may be the right one.

The human body is similarly troubling. Something in your body hurts; what is the reason for the pain? There’s nothing that we can do here. We did not design the human body or mind. Biological organs don’t come with status LEDs or wire protocol error codes. However, we did design computers, and there is nothing to stop us from putting in meaningful error reporting if we want to. We simply consistently refuse to do so. I know I’m harping on about this, but it’s the bane of my existence! (Well, one of them. Another one of them will eventually lead me to declare a duel at dawn, such that we no longer have to share the same plane of existence. I don’t need victory; by that point, I will be accepting death gladly, and he would live with killing someone much better than I would. This presumes that I would not have already shot myself in the head.)

Even error codes, while in themselves unhelpful, would be a start: “Failed to open dfrg.msc: error 8000F00D” “Transaction error - failure at service (0x00001701)”

So long as these codes represent exact and specific errors, you can narrow down the cause far more precisely without having to pay someone to translate all your failures into lots of languages. However, plenty of these codes are also useless. For example, code 0x800706BA indicates RPC failure, which can be anything from a mistyped host to a firewall restriction:

The internal failure is not bubbled up properly and is instead caught and reported using a generic code. This is no more useful than “It failed.”

I need to book a padded cell in advance and to my specification, because I will soon be needing it. Besides, it won’t be long before my hair resembles that of Captain Birdseye.

Posted 15th January 2011 – Comments and questions?