Ошибка доступа к компонентам 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)
Как я могу исправить эту проблему?
Ответы
Ответ 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.