Подтвердить что ты не робот

Ошибка доступа к компонентам COM

Я построил надстройку для Microsoft Office Word. Нет проблемы с использованием надстройки, когда Word запущен как администратор, но когда он не запускается как администратор, есть два общих исключения, получающих доступ к элементам ленты.

Первое исключение:

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)

Эта ошибка возникает, когда элемент управления недействителен по следующему коду:

ribbon.InvalidateControl("control-id");

И второе исключение:

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()

Эта ошибка возникает в последней строке следующего кода:

object wdStory = Word.WdUnits.wdStory;
object wdMove = Word.WdMovementType.wdMove;
WrdApp.Selection.EndKey(ref wdStory, ref wdMove)

Как я могу исправить эту проблему?

4b9b3361

Ответ 1

Проблема решена!

Я уже установил Office 2010, поэтому в реестре Windows есть некоторые несоответствия. Чтобы исправить их, откройте regedit и найдите для CLSID ошибку.

Вы найдете что-то подобное для второй ошибки:

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

С подразделами:

  • ProxyStubClsid
  • ProxyStubClsid32
  • TypeLib

Взгляните на значения (Default) и Version внутри TypeLib.

Теперь найдите node ниже, используя значение (Default) как <TypeLib ID>.

HKEY_CLASSES_ROOT\TypeLib\<TypeLib ID>\

В качестве дочернего элемента этого элемента вы найдете более одного элемента, один из которых - это Version первого реестра. Если вы проверите другие элементы, вы обнаружите, что они ничего не указывают. Удалите остальных!!! Он решил!

Ответ 2

Я начал получать одно и то же исключение после обновления до последней версии Office. Я попробовал ряд предлагаемых исправлений, включая очистку реестра так же, как описано в @Victor.

Что в конечном итоге помогло (хотя это могло быть сочетание факторов), было "исправление" установки:

Programs and Features → последняя Office версия → Repair.

Ответ 3

Просто установите Office 2010/MS word/.NET Programmability Support.

Ответ 4

@Victor Ты заставил меня идти по правильному пути. Моя проблема не была множественными значениями в реестре, а скорее отсутствовала, которую Office365 никогда не добавлял. Благодаря вам я смог найти свое разрешение. Тысяча тысяч спасибо.

Подробности здесь для тех, кто все еще ищет разрешение.

Ответ 5

У меня возникла такая же проблема сегодня с VS2015 и Office 2013. Меняла цель платформы для x64.