Sorry for bringing up this thread again but it was lacking a clear resolution. As I came across it twice while searching Google for "register shdocvw.dll 0x8002801c" I thought it was a good idea to post here what helped me solving the problem.
Actually Jesse was on the right track - the problem is caused by missing write permissions for the local Admin. I was able to track it down like this:
1. Find out what the error code means:
2. Find out what might be causing errors accessing the OLE registry:
-2147319780 (8002801C) Error accessing the OLE registry.
I downloaded and ran regmon, filtered for RegSvr32 and voila, where was an access error for a SetValue to a typelib subkey of an interface. Opened regedt32, gave admin full access rights and immediately regsvr32 worked, error gone. :-)
When registering a DLL, you get the following error: DllRegisterServer in COM failed. Return code was: 0x8002801c
1. Make sure that you are logged into the computer as local Administrator, or are part of the local Administrator group.
2. To identify which registry key is causing the problem use Regmon (a freeware tool published by SysInternals). Use Regmon to capture all registry access when regsvr32 is run. If an ‘OpenKey’ request fails with ‘Access Denied’ (which is listed by Regmon as ‘ACCDENIED’) then run regedt32 and check the permissions on that registry key. If necessary change the permissions on the key to grant local Administrators ‘Full Control’.
3. Finally, try registering the COM object again.
Please see attached image for the exact key (under HKCR/Interfaces) to change permissions.