Проблема: Я столкнулся с проблемой на ПК с Win10 при запуске приложения C#, созданного в VS 2013. Приложение всегда выдает исключение, когда оно пытается создать экземпляр Excel. Microsoft.Office.Interop.Excel добавлен в ссылку на проект (: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Visual Studio Tools for Office \ PIA \ Office15 \ Microsoft.Office.Interop.Excel.dll)
Получено следующее исключение:
Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE))
В средстве просмотра событий я вижу ошибку, связанную с bing версии excel.exe 16:
Faulting application name: EXCEL.exe, version: 16.0.8528.2136, time stamp: 0x59d6c372
Faulting module name: KERNELBASE.dll, version: 10.0.16299.371, time stamp: 0xee297154
Exception code: 0xc06d007f
Fault offset: 0x00103ef2
Faulting process id: 0x2c8c
Faulting application start time: 0x01d41f1db8e05601
Faulting application path: C:\Program Files\WindowsApps\Microsoft.Office.Desktop.Excel_16000.8528.2136.0_x86__8wekyb3d8bbwe\Office16\EXCEL.exe
Faulting module path: C:\windows\System32\KERNELBASE.dll
Report Id: 5c23fa18-770c-4233-b803-e57c2bf68174
Faulting package full name: Microsoft.Office.Desktop_16000.8528.2136.0_x86__8wekyb3d8bbwe
Faulting package-relative application ID: Excel
Фрагмент кода: Приложение пытается создать экземпляр Microsoft.Office.Interop.Excel.Application:
public ExcelReader()
{
try
{
m_excelApplication = new Microsoft.Office.Interop.Excel.Application();
}
catch(System.Exception Exp)
{
MessageBox.Show( Exp.Message );
}
}
Детали окружающей среды: Во время установки ОС есть так называемые доверенные приложения, которые устанавливаются по умолчанию. Мы можем видеть значки, относящиеся к Excel 2016, Word 2016 и т. д. В опции Windows. Но на моем компьютере после установки новой ОС установлен только Office 2013 (64-разрядная версия). У меня есть exe-файл для MS Office 2013 в папке «C: \ Program Files \ Microsoft Office \ Office15 \ EXCEL.EXE».
Почему при запуске приложения вызывается excel.exe версии 16 (C: \ Program Files \ WindowsApps)
Проблема наблюдается на машинах, на которых установлен MS office 2016, MS office 2013 в котором по умолчанию установлены доверенные приложения (2016 г.).
Может ли кто-нибудь помочь мне в этом.





Эта проблема возникает из-за библиотек Interop. Библиотеки взаимодействия имеют разные методы в разных версиях. Вы должны проверить версию имеющихся у вас библиотек Interop и использовать соответствующие библиотеки, необходимые для текущего установленного Office.
На странице что Microsoft вы можете увидеть информацию, где можно получить библиотеки Introp для установленной офисной версии.
Если вы хотите поддерживать несколько офисных версий, вам необходимо установить минимальную версию, которую могут иметь ваши клиенты (например, 2010), а затем написать прокси-классы, которые будут определять версию MS Office и использовать их функции и методы через CLSID.
Потому что по умолчанию ваше приложение отправляется в GAC (Global Assembly Cache) и выбирает библиотеки для Office 2016, но вам нужно запустить 2013. Чтобы решить эту проблему, вы должны создать библиотеки, которые будут включены в ваш проект как встроенные. В этом случае ваши библиотеки будут использоваться вместо библиотек, которые есть в GAC.
Примечание. На моей машине не установлен Office 16. Установлен только Office 2013.
На каком основании приложение подбирает библиотеки по умолчанию
Это похоже на общее правило: сначала приложение пытается получить библиотеки из GAC с той же подписью (если они не встроены), а затем ищет библиотеки в вашем проекте.
Библиотека в GAC имеет ту же версию 15, на которую ссылается приложение.
После нескольких часов поиска в Интернете ответа по этой проблеме я обнаружил, что в разделе Службы компонентов> Компьютеры> Мой компьютер> Конфигурация DCOM> Приложение Microsoft Excel >> Панель свойств - [Вкладка «Идентификация»], настройка по умолчанию для Windows 10. - Запускающий пользователь, а в Windows 7 по умолчанию - Интерактивный пользователь. Изменение настройки идентификации в Windows 10 на Интерактивный пользователь решило эту проблему для меня. Надеюсь, это сэкономит другим людям время, которое мне потребовалось, чтобы найти ответ.
Но почему эта проблема возникает только в том случае, если в установке ОС присутствуют доверенные приложения.