When you self register a dll, basically, all it does is create registry entries. When self registration succeeds, all we know for sure is that the dll was loaded successfully (meaning any static dependecies exist), the DllRegisterServer method was found and it succeeded. That does not guarantee that you can create instances on the interfaces that dll exposes.
We could have designed QualityMonitor to just check that the registry entries exist but we wanted to take it a step further and see if these CLSIDs and ProgIds would actually execute. Since all COM objects inherit from IUnknown, in theory, we should be able to create an instance of that object through IUnknown. However, it may turn out that in reality, this check is a bit too stringent.
It is possible that these objects fail because of dynamic dependencies, or some configuration is wrong, or some other objects need to be created first. It is also possible that the application may still work because it may not use those objects, or it knows how to use them. Or it may be a problem with the installation. It will vary from case to case.
We welcome input on this feature and we will see what we can do to improve the overall experience.
Joe