System.UnauthorizedAccessException: получение фабрики классов COM для Word Interop завершается с ошибкой 80070005
У меня проблема с проектом С# ASP.NET в Visual Studio 2008
Эта проблема началась, когда я переустановил свой компьютер с Windows 7 Ultimate (x64). Для этого я также использую Office 2007.
Я получаю сообщение об ошибке:
System.UnauthorizedAccessException: получение фабрики классов COM для компонента с CLSID {000209FF-0000-0000-C000-000000000046} не удалось из-за следующей ошибки: 80070005. в xxx.Utility.WordDocument..ctor(String filePath, HttpServerUtility util) на customer_communication.BuCreate_click (Отправитель объекта, EventArgs e) в c:\xxx\Website\customer\communication.aspx.cs: строка 127
Ответы
Ответ 1
Вот мое исправление для этой проблемы:
Я использую Win 7 64bit и Office 2007
Запустить программу " dcomcnfg -32". (Вы не можете найти слово и компоненты excel, если оно работает под 64 бит)
Перейдите в раздел "Консоль Root/Компонентные услуги/Компьютер/Мой компьютер /DCOM Config/"
Найдите Microsoft Word и Excel и выберите свойства.
Перейдите в раздел Безопасность и выберите "Настроить" в разделе "Разрешения конфигурации". (При необходимости вы можете также изменить другие разрешения, но мне не нужно было)
Добавьте "IIS_IUSRS" и дайте ему "Полный контроль".
Теперь перейдите к "Идентичность" и выберите "Интерактивный пользователь".
Не забудьте нажать "ОК", когда закончите.: D
Надеюсь, это поможет вам с вашей проблемой, а также с остальными, кто попадает сюда и читает это.
Ответ 2
Вам следует предоставить доступ к компоненту Word COM для идентификации процесса ASP.NET({MACHINE}\ASPNET в IIS 5 или сетевой службе на IIS 6):
"Панель управления - Средства администрирования - Службы компонентов - Компьютеры - Мой компьютер - Конфигурация DCOM"
Узнайте "Microsoft Word Document", щелкните правой кнопкой мыши - "Настройки" - вкладку "Безопасность", предоставите доступ (локальный и удаленный) для идентификации процесса ASP.NET( "ASPNET" для IIS 5, "Сетевая служба" для IIS 6).
Если вы получите "System.Runtime.InteropServices.COMException(0x800A13E9): недостаточно памяти. Сохраните документ сейчас". исключение при открытии/добавлении документа (мой собственный опыт), просто удалите временные файлы из папки% Temp% и\Content.Word.
Ответ 3
Этот был липким для меня, чтобы понять, возможно, мои навыки работы с mojo в Windows просто подпадают. Но я не мог заставить Службы компонентов работать в 32-битном режиме на Windows Server 2008. Надеюсь, это может помочь кому-то другому с той же проблемой:
- Запуск служб компонентов с помощью ранее упомянутого метода ( "Выполнить" или "Администрирование" ); закрыть эту программу
- Вставьте "C:\Windows\System32\mmc.exe" /32 в поле "Выполнить" и нажмите "Enter" (проверьте в диспетчере задач, что вы видите mmc.exe * 32)
- Перейдите в файл и вы увидите comexp.msc в списке (из-за шага 1), выберите его, и он откроет Component Services в консоли MMC на 32-битном режиме.
EDIT: для полноты использования, чтобы заставить Word Interop работать в Windows Server 2008, мне также пришлось создать папку рабочего стола, как описано в этом ответе.
Ответ 4
при запуске dcomcnfg -32
или dcomcnfg /32
оба не смогли отобразить целевое приложение (Microsoft Excel) в списке.
Но, следуя указаниям @Как сделать так, чтобы IIS7 хорошо работал с Office Interop, в частности, к примечанию о запуске mmc -32
и ручном добавлении оснастки "Службы компонентов", я смог получить ее появляются. (ПРИМЕЧАНИЕ: хотя ссылка говорит о IIS7, моя проблема была связана со службой Windows).
- Пуск> Выполнить> dcomcnfg (или "mmc -32 ″, а затем добавьте оснастку" Службы компонентов "вручную, если не удается найти приложение на шаге 3)
- Перейдите к Службам компонентов> Компьютеры> Мой компьютер> Конфигурация DCOM
- Найдите приложение MS, вызывающее проблемы (например, "Приложение Microsoft Excel" для Excel или "Документ Microsoft Word 97 - 2003" для Word)
- Щелкните правой кнопкой мыши> Свойства
- На вкладке "Безопасность": выберите "Настроить" в разделе "Разрешения на запуск и активацию" и нажмите "Изменить..."
- Добавьте учетную запись, под которой работает сайт (например, Сетевая служба), и назначьте Local Launch & Разрешения локальной активации
- Вуаля!
Ответ 5
Это сработало для меня:
- В командной строке введите DCOMCNFG
- Службы компонентов → Компьютеры → Мой компьютер → Конфигурация DCOM
- Найдите "Документ Microsoft Word 97 - 2003" (если он отсутствует, проверьте, не является ли ваше Word также 64-разрядным)
- Щелкните правой кнопкой мыши → Свойства
- Перейдите на вкладку "Безопасность" и "Редактируйте" переключатели "Настроить", чтобы IIS_IUSRS мог иметь права на запуск и доступ.
- Перейдите в "Идентификатор табуляции" и выберите "Интерактивный пользователь"
- Применить изменения и повторить попытку
- Если все это не удается, перейдите также к вкладке "Общие" и в раскрывающемся списке "Уровень аутентификации" выберите "Нет".
Ответ 6
Исправьте ответ Tomas, правильная команда на Windows Server 2k8 x64: "dcomcnfg/32" (слэш вместо -)
Также мне пришлось настроить все параметры безопасности, добавив IIS_IUSRS с полными правами на разрешения на переключение и разрешение доступа, разрешения доступа и разрешения. И интерактивный пользователь на вкладке "Идентификация". Тогда это сработало для меня.
У меня возникла проблема с открытыми документами Word 2010, и мне пришлось установить его для Microsoft Document 97-2003 Document Properties.
Ответ 7
Эта ошибка соответствует .NET System.UnauthorizedAccessException и обычно вызвана неправильными настройками доступа к COM-компоненту, который пытается создать ваш код.
Вы можете попытаться запустить утилиту dcomcnfg, перейти к настройкам DCOM, выбрать нужный объект и разрешить доступ к нему для учетной записи вашего кода ASP.NET. Он должен решить вашу проблему.
Ответ 8
У меня была такая же проблема, в конце концов, потому что у моего пользователя не было разрешения на запуск службы "Remote Procedure Call (RPC)".
В панели управления, в административных средствах я искал эту службу и в журнале "Вход в систему" я нажал "Локальная системная учетная запись", я перезапустил систему и устранил проблему.
Ответ 9
Я тестирую все вышеописанные методы, которые также отмечены как ответ, но на сервере Windows, когда пользователь не активен или выходит из системы, получить исключение доступа. так:
- Я создал пользователя на локальном компьютере и добавил его в две группы:
IIS_USER и Администратор
- Службы компонентов → Компьютеры → Мой компьютер → Конфигурация DCOM
- В com + object я изменяю для запуска компонента Microsoft Word 97 - 2003 с этим пользователем.
Смотрите здесь
- также добавьте IIS_USER, а также пользователь Application-identity ( IIS
APPPool\[Name]) ко всем трем разделам раздела безопасности и сделать все возможное.
Посмотрите здесь
офис будет запускаться с настройками пользователя, созданного на первом шаге, поэтому, если вы измените какие-либо настройки с этим пользователем. 120% Работа без проблем. попробовал 3 разных сервера.
Ответ 10
Перейдите в реестр HKCR>TypeLib>{00020905-0000-0000-C000-000000000046}>8.7>0
, затем удалите папку "win32", это ошибка Word COM Class.
Перейдите в реестр HKCR>TypeLib>{00020813-0000-0000-C000-000000000046}>1.9>0
, затем удалите папку "win32", это ошибка Excel COM Class.
Попробуйте этот метод, чтобы этот метод решил мою проблему.