Friday, September 15, 2006

The Unbeatable Problem.

No problem is unbeatable if you look at it as files and registry entries (in Windows).   I recently came across a very, very pain in the ass problem that hasn't seemed to have been resolved anywhere.  Microsoft has a solution for it, but Microsoft's solution did not resolve the issue I was having.  The interface on the clipart window worked-- to an extent.  You could NOT open any of the folders in the collection list.  My collections, Office collections, Web collections, none of them were expandable.  The user was getting this error message:

Clip art organizer cannot complete the requested task.
Class not registered. Error code 0x80040154

The solution for me?  Doing registry traces using Regmon to find out what registry keys it was using (using filemon revealed that there were no missing files).

Initially I found the error message repeated itself BEFORE drawing the collection list but then would continue after the message was displayed.  I then tried to time Regmon to monitor only MSTORE.EXE (the clip organizer app) to only monitor just before and then stop when the message was displayed.  The list of registry keys I got were HKCR and HKCU CLSID registry keys (Class ID's -- class not registered --> we're close here :)).  I went through each registry key but they all seemed fine (ie, they opened without issue).  So, step 2 was to repeat the process on a working machine.  There was no errors and the regmon dump looked almost identical on both machines with the differences being negligible.

Time to get into the nitty gritty.  So I opened each CLSID registry key found in the regmon dump in a working machine and the non-working machine.  I found TWO keys that did not match.  These were those keys:

 

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{ef636390-f343-11d0-9477-00c04fd36226}]
@="OLE DB Rowset Proxy"

[HKEY_CLASSES_ROOT\CLSID\{ef636390-f343-11d0-9477-00c04fd36226}\Implemented Categories]

[HKEY_CLASSES_ROOT\CLSID\{ef636390-f343-11d0-9477-00c04fd36226}\Implemented Categories\{00000003-0000-0000-C000-000000000046}]

[HKEY_CLASSES_ROOT\CLSID\{ef636390-f343-11d0-9477-00c04fd36226}\InprocServer32]
@="C:\\Program Files\\Common Files\\System\\Ole DB\\msdaps.dll"
"ThreadingModel"="Both"

[HKEY_CLASSES_ROOT\CLSID\{ef636390-f343-11d0-9477-00c04fd36226}\ProgID]
@="DBRSTPRX.AsProxy.1"

[HKEY_CLASSES_ROOT\CLSID\{ef636390-f343-11d0-9477-00c04fd36226}\VersionIndependentProgID]
@="DBRSTPRX.AsProxy"

AND:

 

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{ef636392-f343-11d0-9477-00c04fd36226}]
@="OLE DB Row Proxy"

[HKEY_CLASSES_ROOT\CLSID\{ef636392-f343-11d0-9477-00c04fd36226}\Implemented Categories]

[HKEY_CLASSES_ROOT\CLSID\{ef636392-f343-11d0-9477-00c04fd36226}\Implemented Categories\{00000003-0000-0000-C000-000000000046}]

[HKEY_CLASSES_ROOT\CLSID\{ef636392-f343-11d0-9477-00c04fd36226}\InprocServer32]
@="C:\\Program Files\\Common Files\\System\\Ole DB\\msdaps.dll"
"ThreadingModel"="Both"

[HKEY_CLASSES_ROOT\CLSID\{ef636392-f343-11d0-9477-00c04fd36226}\ProgID]
@="DBROWPRX.AsProxy.1"

[HKEY_CLASSES_ROOT\CLSID\{ef636392-f343-11d0-9477-00c04fd36226}\VersionIndependentProgID]
@="DBROWPRX.AsProxy"

The "non-working" computer only had the Implemented Categories subkey in each of the main keys, missing InproceServer32, ProgID and VersionIndependentProgID.

Added those keys and alls well :)