Error accessing COM components

c#, com, ms-word, office-2007

Solution

Problem solved!

I have previously installed Office 2010, so there are some inconsistences in Windows Registry. To fix them, open the `regedit` and find for the CLSID from the error.

You will find something like that for the second error:

HKEY_CLASSES_ROOT\Interface\{00020970-0000-0000-C000-000000000046}

With the subkeys:

- ProxyStubClsid

- ProxyStubClsid32

- TypeLib

Take a look at the `(Default)` and `Version` values inside of `TypeLib`.

Now find the node below, using the `(Default)` value as `<TypeLib ID>`.

`HKEY_CLASSES_ROOT\TypeLib\<TypeLib ID>\<version>`

As child of this elements you will find more than one element, one of then is the `Version` of the first registry. If you inspect the others elements, you will find that they point to nothing. Remove the others!!! It's solved!

Problem

I built an add-in for Microsoft Office Word. There isn't an issue using the add-in when Word is ran as Administrator, but when it's not ran as an Administrator, there are two common exceptions accessing Ribbon elements. The first Exception: ``` Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Core.IRibbonUI'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{000C03A7-0000-0000-C000-000000000046}' failed due to the following error: could not be found. (Exception from HRESULT: 0x80030002 (STG_E_FILENOTFOUND)). at Microsoft.Office.Core.IRibbonUI.InvalidateControl(String ControlID) ``` This error occurs when the Control is invalidated by the following code: ``` ribbon.InvalidateControl("control-id"); ``` And the second Exception: ``` Unable to cast COM object of type 'Microsoft.Office.Interop.Word.ApplicationClass' to interface type 'Microsoft.Office.Interop.Word._Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00020970-0000-0000-C000-000000000046}' failed due to the following error: could not be found. (Exception from HRESULT: 0x80030002 (STG_E_FILENOTFOUND)). at Microsoft.Office.Interop.Word.ApplicationClass.get_Selection() ``` This error occurs on the last line of the following code: ``` object wdStory = Word.WdUnits.wdStory; object wdMove = Word.WdMovementType.wdMove; WrdApp.Selection.EndKey(ref wdStory, ref wdMove) ``` How can I fix this problem?

Original source