Ошибка выполнения сервера (исключение из HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE))

Я пытаюсь преобразовать файл.xls в файл.xlsx на стороне сервера, используя Microsoft.Office.Interop.Excel.Workbook Класс следующим образом:

 workBook.SaveAs("FILENAME_HERE", XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

и я получаю следующую ошибку:

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)). : System.Runtime.InteropServices.COMException (0x80080005): 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)).
   at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
   at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)
   at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Activator.CreateInstance(Type type)
   at CALLING_METHOD_IN_MY_LIBRARY_HERE...

Проблема в том, что эта ошибка возникает только на промежуточном сервере; на моей локальной машине все работает нормально.

Вещи, которые я пробовал на промежуточном сервере:

  1. ** 1) Запустите dcomcnfg open Службы компонентов

2) Разверните Службы компонентов "->" Компьютер "->" Мой компьютер "->" Конфигурация DCOM "

3) Найдите "Приложение Microsoft Excel".

4) Право, чтобы открыть диалоговое окно Свойства

5) Нажмите на вкладку "Безопасность",

6) "Разрешения на запуск и активацию, настройка разрешений, добавленные разрешения - идентификация запускается под пользователем Adminstrator (этот пользователь), интерактивным пользователем и запускающими пользователями".

7). Разрешения на запуск и активацию + Разрешения на доступ + Разрешения на настройку => добавлены IIS_IUSRS + Сетевая служба с полным контролем **

2.Изменил сборку проекта, которая преобразует файл.xls из "Любого процессора" в "x86" на моем локальном компьютере, и опубликовал эту библиотеку на сервере.

Кто-то разобрался, как решить эту проблему? Я борюсь за решение этой проблемы в течение 2 дней.

11 ответов

Использование DCOMCNFG.exe. Откройте его и выберите: Службы компонентов -> Компьютеры -> Мой компьютер -> Конфигурация DCOM -> Приложение Microsoft Excel.

Откройте свойства, выберите вкладку "Удостоверение" и выберите интерактивного пользователя.

Я нашел решение в другом месте.

Выполнение следующих действий решило мою проблему:

Использование DCOMCNFG.exe. Откройте его и выберите: Службы компонентов -> Компьютеры -> Мой компьютер -> Конфигурация DCOM -> Приложение Microsoft Excel. Откройте свойства, выберите вкладку Identity и выберите интерактивного пользователя.

НО- проблема возвращалась каждые несколько минут!

После нескольких часов попыток выяснить причину, я заметил, что на моем сервере былисотни открытых процессов WINWORD.EXE. Это вызвало проблемы с памятью, которые привели к exception from hresult 0x80080005 ошибка.

Ну, довольно глупо, я забыл написать код, чтобы закрыть приложение взаимодействия. Как только я исправил это, ошибка исчезла.

doc.Close(false);
Marshal.ReleaseComObject(doc);
word.Quit();
Marshal.ReleaseComObject(word);

Я нашел эту статью, в которой более подробно говорится об этой проблеме. Если это поможет, ошибка "80080005 Выполнение сервера не удалась (Исключение из HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)))" может возникнуть по следующим причинам:

  1. Машина имеет высокую загрузку ЦП, и запуск процесса занимает много времени и не может выполнить CoRegisterClassObjects() менее чем за 120 секунд.
  2. COM-сервер не регистрируется для правильных идентификаторов классов.
  3. COM-сервер в настоящее время останавливается, и существует условие состязания между CoCreateInstance и частью остановки COM-сервера.
  4. Существует проблема безопасности в способе запуска COM-сервера (кажется, что на этой странице предлагаются неправильно написанные пароли или отсутствует привилегия "Войти как пакетное задание" для COM-серверов "Запуск от имени"), но в любом случае я бы предложил еще раз проверить это информация для вашей конкретной конфигурации)

https://blogs.msdn.microsoft.com/adioltean/2005/06/24/when-cocreateinstance-returns-0x80080005-co_e_server_exec_failure/

Я исправил эту проблему с помощью этого решения: щелкните правой кнопкой мыши Службы компонентов / Компьютеры / Конфигурация DCOM /Microsoft Word97 - 2003 Свойства документа / Вкладка "Общие"

установить уровень аутентификации: нет

TL; DR; исправление для меня - отключить автовосстановление из файла -> Параметры -> Сохранить, а затем удалить все автоматически восстановленные файлы. Похоже, что основная причина заключается в объеме файлов автовосстановления.

Предпосылки Я чередую много циклов открытия / закрытия / вычисления. Периодически приложение C# не может открыть книгу из-за ошибки ниже.

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

Приложение неоднократно выдает эту ошибку и застревает в этом состоянии до тех пор, пока автоматически восстановленные файлы не будут удалены из Excel.

Далее следует другой симптом; когда я пытаюсь открыть приложение Excel (как будто для создания новой книги, а не для открытия существующей), требуется много времени, чтобы вращать циклы процессора. Со временем он открывается, и на панели «Восстановленные файлы» слева перечислено множество файлов.

я Closeпанели с помощью кнопки, все файлы затем удаляются. Повторное открытие Excel после этой процедуры почти мгновенно. С этого момента приложение снова работает нормально.

Пуск -> Выполнить (Windows+R)

Введите: dcomcnfg -32 (нажмите Enter), это должно открыть службы компонентов .

Разверните Службы компонентов, Компьютеры, Мой компьютер, Конфигурация DCOM.

Прокрутите вниз до «Приложение Microsoft Excel»

Щелкните правой кнопкой мыши, выберите свойства, перейдите на вкладку «Безопасность».

Изменить права доступа

Нажмите Добавить

Введите <Computer_Name>/IIS_IUSRS (или перейдите в Locations, выберите имя компьютера — если используется домен, по умолчанию он будет искать домен и не найдет IIS_IUSRS)

Убедитесь, что флажок «Разрешить» установлен для «Локальный доступ».

Нажмите OK, еще раз нажмите OK (перезагрузка не требуется)

Центр обновления Windows будет сбрасывать это когда-либо один раз

У меня была аналогичная проблема с моим консольным приложением Visual Studio. Я попробовал вышеупомянутое решение, упомянутое «Владимиром Шияновым».

Кроме того, мое приложение было настроено на запуск только для 32-битных приложений. Когда я снял этот флажок, приложение заработало успешно.

Та же проблема была решена для меня "разрешением взаимодействия с рабочим столом" для сервиса. (в инструменте конфигурации tomcat6w на вкладке Вход в систему)

Вы никогда не захотите иметь Excel на стороне сервера!

И, пожалуйста, поверьте мне, если вам нужно манипулировать листами Excel, вы не хотите использовать ничего, кроме Excel. Не используйте какую-либо библиотеку, потому что рано или поздно вы столкнетесь с ошибками, которые не могут быть исправлены или не могут быть исправлены по нескольким причинам (одна из которых состоит в том, что Excel делает что-то "неправильно"). Вы используете Excel только на стороне клиента. Ваш клиент должен установить и поддерживать его. Если он есть, вы его используете, в противном случае вы говорите им, что функциональность Excel работает только с действующей установкой Excel на клиентском компьютере.

Используйте XML, DataSet или что-то еще для потоковой передачи информации Excel на сервер для ее хранения. Или манипулируйте этими данными с помощью кода на стороне сервера, но не с помощью Excel.

Взаимодействие с Excel всегда должно происходить на клиентском компьютере. Это просто так...

Я все это попробовал, ничего не помогло. Для меня это просто открытие Excel, которое заработало, а затем закрытие его. Просто открываю и закрываю. Я правда не понимаю, ПОЧЕМУ так получилось. Пробовал дважды, обе ошибки, обе решаются простым открытием Excel.

Попробуйте добавить метод Thread.Sleep, например Thread.Sleep(2000), на 2 секунды после двух методов workBook.open и workBook.Save. Если ваш файл Excel имеет много форматов, попробуйте продлить еще несколько секунд.

Другие вопросы по тегам