Ошибка доступа к компонентам 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)

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

 Victor18 окт. 2012 г., 20:03
Хорошо. Спасибо, в любом случае! :)
 Victor18 окт. 2012 г., 17:01
Да, работает в разработке компьютера. Только на тесте машина не работает. Может быть, потому что я устанавливаю (и удаляю) многие версии Office (2007, 2007-64, 2010, 2010-64)
 Wug18 окт. 2012 г., 20:01
Я удалил свой ответ, потому что это нене работает для вас, и мы нене нужно, чтобы люди собирались и взрывали свои реестры, пытаясь найти такие рискованные решения.
 Wug18 окт. 2012 г., 17:03
О, Боже. Ну, на какой операционной системе работает тестовая машина?
 Victor18 окт. 2012 г., 17:04
Windows 7 64 бит с Office 2007 32 бит
 Wug18 окт. 2012 г., 16:59
Это работает на других компьютерах? Я сломал реестр на днях (на компьютере коллеги не меньше) и столкнулся с проблемами, похожими на все программы, использующие компоненты COM. Если это работает на другом компьютере, яЯ объясню, что я сделал, чтобы это исправить.
 Victor18 окт. 2012 г., 17:06
Но почему, когда яработает как администратор все работает нормально?
 Wug18 окт. 2012 г., 17:09
Я неНе знаю, но у меня была такая же проблема. Запуск программ от имени администратора работал, но в большинстве случаев возникали ошибки и происходил сбой. Я'выложу ответ с тем что я сделал.

Ответы на вопрос(6)

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

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

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

Программы и особенности → самый последнийофис версия → Ремонт.

 Wudge04 апр. 2017 г., 14:48
Это сработало и для меня с Office 365 и Windows 7. Спасибо!
 Steven Yong21 авг. 2017 г., 06:00
У меня работает, у меня только VS2010 и Office 2016

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

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

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

Решение Вопроса

Задача решена!

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

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

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

С подключами:

ProxyStubClsidProxyStubClsid32TypeLib

Посмотрите на(Default) а такжеVersion значения внутри.TypeLib

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

HKEY_CLASSES_ROOT\TypeLib\\

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

 Victor18 окт. 2012 г., 22:03
@ Wug, проблема найдена! Спасибо за помощь мне.
 Pat Mustard29 окт. 2012 г., 05:40
Здесь тоже исправлено - большое спасибо !!
 cesara31 окт. 2014 г., 00:32
Спасибо! Потратил целый день на отладку надстройки на одном компьютере, и это решило ее
 Armin Sadeghi04 июл. 2014 г., 07:30
Возникла та же проблема при откате с Office 2013 на Office 2010. Это решение работало отлично.
 animaonline25 окт. 2012 г., 13:08
тот'Это именно то, что мне было нужно, это решило мою проблему, спасибо, мужик!
 nawfal06 мар. 2013 г., 09:11
Спасибо, спас меня тоже!

Офисный ремонт у меня сработал. В моем случае я установил Project, который, как мне кажется, изменил конфигурацию и не смог вызвать процедуру для переноса данных из книги Excel в SQL

Ваш ответ на вопрос