I'm pretty knowledgable about the Windows Registry and have noticed that the Typelib entries are not normally cleaned up after CCleaner removes a CLSID entry. If the CLSID entry has a Typelib entry and is the ONLY one referencing the Typelib, why isn't the Typelib key removed. And are the pathnames checked in Typelib entries normally, as well as the Interface sections. The normal sequence of checks is based upon:
The CLSID section will consider an entry to contain a problem if any Handler or Server file entry can not be found by the system. This can occur if a server has been registered over the net and the network
connection has been broken. Other reasons for an entry to be listed is if the server has been moved or deleted. This section provides the most information about the entry listed to help you wisely chose the entries to remove.
The ProgId section tries to match its CLSID entry with one in HKEY_CLASSES_ROOT\CLSID. The typical entry being searched in the Registry is of the format HKEY_CLASSES_ROOT\Some ProgId\CLSID. If the
entry under HKEY_CLASSES_ROOT does not contain a CLSID sub-entry, then it is ignored. This insures that only ProgIds are listed. Any clean up process is identical to that of the CLSID section.
The TypeLib section looks for references to .tlb files and if one is found in the registry that can not be found in the system then the entry is problematic.
The final section is the Interface portion of HKEY_CLASSES_ROOT. In this section each entry with has a TypeLib entry is compared to the entries in HKEY_CLASSES_ROOT\TypeLib and if a match is not found the entry is problematic. This entry has the least amount of information available for deciding which Registry entries to delete. In fact the only information available are the TypeLib and Interface GUIDs. However,
since this section is highly dependent on the TypeLib section, it should be safe to delete these entries as long as you have resolved the TypeLib issues first.
You can have a Typelib entry without having a CLSID entry, but you cannot have a CLSID entry without having a valid Typelib entry. If the Typelib entry is missing or directed to an invalid pathname, then the Typelib entry is invalid as well as the CLSID entry as well as the PROGID. It is a cascading effect, mostly bottom to top, than top to bottom.
However, it is not necessary to have a CLSID for each Typelib entry. But each Typelib entry must point to a valid pathname. You MUST have a valid Interface pointing back to a valid Typelib.
Does CCleaner do any of this in it's analysis?