hi all. long time listener... actually, just breezing through and had to stop, register, and say *something* about the madness here.
i'm a developer with ~15 years experience writing code for (mostly) windows. i currently run a team of guys that develops laboratory applications using c# (.net).
there seems to be a culture of fear around registry tools. this is not entirely unhealthy, especially considering some of the horror stories we've all heard, but there are some valid reasons why keeping your registry maintained is good for system performance.
these tools are certainly not for the faint of heart, nor the technically challenged. i also can't speak as to the logic (or lack thereof) used by any particular tool - as i haven't reviewed any source code. in fact, i came upon this because i am looking for a tool that i might have some faith in - we'll see. anyway, my opinion here is more philosophical, with a technical slant.
the windows registry is a database. it is a tree structured container for simple data types, many of which are cross-references to other locations in the tree. others are pointers to file locations and other resources, and the remainder are basically configuration parameters... relationships/pointers are unenforced - meaning that a target can disappear, change, or move, and there is nothing to guarantee the pointer will be updated - that only happens if the software (or person) doing the modification is particularly conscientious.
inconsistencies are common and quite problematic with databases, even those used only by a single application that follows consistent rules - stuff happens and data does get corrupted.
the registry, though, is *not* a single-application database. it's highly shared, allowing unrestricted read/write access from multiple consumers (all the software which has installed itself on your machine, and any running application or service). this is bad news, and the inconsistencies pile up pretty quickly.
why are inconsistencies bad? they can cause error conditions for any application (including windows and subsystems) that attempt to enumerate or access affected key(s). application errors usually have associated exception handlers -- extra code which has to run, and either workaround the problem or somehow log/notify, then continue. if the application doesn't have a handler, it will probably cause the OS to have to deal with a terminating app... in any case, exceptions slow software down.
now, all that said, just removing a bad reference (even cascading this operation, by running a cleaner multiple times as suggested by someone earlier) doesn't necessarily fix a problem. it might, as many applications will ignore or recreate missing keys, or even notify the user that a reinstall/repair is needed. some, however, won't. and may still have problems - but probably nothing worse than you already had. in my experience as a windows user, and from the perspective of someone who's had to write exception logic, a missing reference is better than an inconsistent one.
HTH
--ian