"Получение COM-класса factory для компонента.... ошибка: 80070005 Доступ запрещается". (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))
Я просто создал простое приложение и размещен в IIS6.0. В коде я просто создаю объекты excel.
using excel = Microsoft.Office.Interop.Excel.Application;
namespace TestHosting
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
excel excelObj=new Microsoft.Office.Interop.Excel.Application();
}
}
}
Это дает мне следующую ошибку
"Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied." (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).
Конфигурация системы:
Сервер Windows 2008, корпоративная версия с 64-разрядной версией.
пакет обновления 2
Я попытался найти множество возможных решений в Интернете, но никто из них не работал у меня.
Некоторое решение, которое я пробовал, ниже
1) создание рабочего приложения под контуром "C:\Windows\SysWOW64\config\systemprofile"
2) установка полного разрешения/контроля для Microsfot.EXcelApplicaiton в DCOMCNFG
3) Убивание всех экземпляров excel в диспетчере задач
Пожалуйста, помогите мне в этом, это просто пример приложения, но в моем оригинальном приложении в основном говорится о чтении и записи данных из/в excel.
Ответы
Ответ 1
- Убедитесь, что на сервере установлено время выполнения Office.
- Если вы используете Windows Server 2008, то использование офисных переходов - это небольшая конфигурация, и вот шаги.
Лучше перейти к Open XML или настроить как ниже
- Установить MS Office Pro Latest (я использовал 2010 Pro)
- Создать пользовательский ExcelUser. Назначить WordUser с помощью группы Admin
- Перейти к компьютеру → Управление
- Добавить пользователя с нижеуказанными параметрами
- Параметры пользователя Пароль никогда не истекает
- Пароль не может быть изменен.
Com + Конфигурация
- Перейдите в Панель управления → Администратор → Службы компонентов → Конфигурация DCOM
- Откройте свойства Microsoft Word 97 - 2003
- Общие → Уровень аутентификации: нет
- Безопасность → Настроить все 3 разрешения, разрешающие всем
- Идентификация → Этот пользователь → Использование ExcelUser/password
- Запустите приложение Excel, чтобы убедиться, что все в порядке.
3.Измените параметры безопасности приложения Microsoft Excel в конфигурации DCOM.
Панель управления → Административные средства → Службы компонентов → компьютеры → myComputer → DCOM Config → Приложение Microsoft Excel.
Щелкните правой кнопкой мыши, чтобы получить диалог свойств. Перейдите на вкладку "Безопасность" и настройте разрешения
Смотрите сообщения здесь: Ошибка при создании объекта Excel, Excel-манипуляции в WCF с помощью COM
Ответ 2
Иногда вы создаете новый пул приложений и не можете его решить через DCOMCNFG. Тогда есть еще один способ:
Установите Идентификация (Имя модели) пула приложений в Локальная система.
Я не знаю основную причину, но однажды решает мою проблему.
Ответ 3
3.
Для 64-разрядной (x64) создайте эту папку:
C:\Windows\SysWOW64\Config\systemprofile\Desktop
Для 32-разрядной (x86), создайте эту папку:
C:\Windows\System32\Config\systemprofile\Desktop
Служба Windows, если она запущена под системным профилем, нуждается в папке "Рабочий стол". Эта папка была автоматически создана на XP и более ранних версиях Windows Server, но не для Vista и Windows 2008 Server.
Ответ 4
Решение которое сработало для меня, - это изменение пользователя, в котором запущен пул приложений (ApplicationPoolIdentity явно недостаточно прав для доступа к COM-объекту).
Удачи!
Ответ 5
попробуйте сделать следующее:
- Убедитесь в том, что сборки взаимодействия с Microsoft Office установлены.
- Проверьте версию сборок на разработку и производство.
- Создать папку рабочего стола в системном профиле.
- явно установить защиту DCOM для пользователя службы.
вы можете найти более подробную информацию здесь
Ответ 6
Слишком поздно ответить. Но если это поможет кому-то, кто все еще сталкивается с проблемой. Я получил это исправление:
→ Установить сайт в выделенном пуле вместо общего.
→ Включить поддержку 32-разрядных приложений.
→ Установить идентификатор пула приложений в LocalSystem.
Ответ 7
У вас установлен Excel на сервере? Используемые интерфейсы взаимодействия используются для автоматизации Excel, для которого требуется, чтобы приложение Excel было установлено там. Каждый цикл запроса страницы потенциально запускает отдельный экземпляр excel.exe. Я бы настоятельно советовал делать это как часть веб-приложения.
Почему вы хотите это сделать? Если вы хотите генерировать документы Excel, есть намного лучшие способы сделать это, включая OpenXML, как упоминалось в другом месте в этом потоке. Не запускайте Excel на сервере!
Ссылка на загрузку SDK OpenXML: http://www.microsoft.com/en-us/download/details.aspx?id=5124
Ответ 8
Это похоже на проблему разрешения. Я предлагаю запустить processMonitor, чтобы определить, какие разрешения необходимы.
Ответ 9
Я просто создал простое приложение
Каков целевой процессор приложения? Я предполагаю, что это x86
- поэтому либо установите его на x64
, либо anycpu
.
Я думаю, что проблема, с которой вы сталкиваетесь, связана с 64-битным процессом, пытающимся получить доступ к 32-битной DLL.
Кроме того, если вы не можете изменить целевой процессор, вы можете попытаться включить 32-разрядные приложения из настроек пулов приложений в IIS.
Ответ 10
используйте NPOI, чтобы читать и писать excel..it бесплатно и с открытым исходным кодом
для exapmle
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
//.....
private void button1_Click(object sender, EventArgs e)
{
HSSFWorkbook hssfwb;
using (FileStream file = new FileStream(@"c:\test.xls", FileMode.Open, FileAccess.Read))
{
hssfwb= new HSSFWorkbook(file);
}
ISheet sheet = hssfwb.GetSheet("Arkusz1");
for (int row = 0; row <= sheet.LastRowNum; row++)
{
if (sheet.GetRow(row) != null) //null is when the row only contains empty cells
{
MessageBox.Show(string.Format("Row {0} = {1}", row, sheet.GetRow(row).GetCell(0).StringCellValue));
}
}
}
см. этот fooobar.com/questions/104116/...
Ответ 11
http://www.vbforums.com/showthread.php?657928-failed-due-to-the-following-error-80070005-Access-is-denied.
С помощью этой ссылки мы можем решить проблему "Отказано в доступе" для объектов excel, word.
Это действительно полезная ссылка
Ответ 12
Лично я выполнил следующие шаги:
* Установите Interop Assemblies: вы можете установить с веб-сайта Microsoft https://www.microsoft.com/en-us/download/details.aspx?id=3508&tduid=(09cd06700e5e2553aa540650ec905f71)(256380)(2459594)(TnL5HPStwNw-yuTjfb1FeDiXvvZxhh.R.Q)()
* Проверьте версию сборок: проверьте версию сборок на машинах разработки и производства. Собрания будут в GAC, у вдов 7 эта папка% windir%\assembly.
* Создайте папку рабочего стола: служба использует папку рабочего стола под системным профилем, поэтому вам нужно будет создать эту папку, если она отсутствует, вот расположение папки:
Для 64-битных приложений: C:\Windows\SysWOW64\config\systemprofile\Desktop
Для 32-разрядных приложений: C:\Windows\System32\config\systemprofile\Desktop
* Добавить права пользователя DCOM:
--- запустите окно запуска и введите "dcomcnfg".
--- Развернуть Службы компонентов → Компьютеры → Мой компьютер → DCOM Config.
Посмотрите приложение Microsoft Excel. Щелкните правой кнопкой мыши на нем и выберите свойства, затем выберите вкладку "Безопасность".
--- Выберите переключатель "Настроить" в разделе "Разрешения на запуск и активацию" и "Разрешение доступа" и нажмите кнопку "Изменить", чтобы добавить пользователей следующим образом.
--------- Нажмите кнопку "Добавить" и "IIS_IUSRS" пользователей и "NETWORK SERVICE" и предоставите им полные привилегии.
--- Перейдите на вкладку "Идентификация" и выберите опцию "Интерактивный пользователь".
--- Нажмите "Применить" и "ОК".
Ответ 13
Используйте этот
создать пользователя в группе администратора
добавьте эту информацию пользователя в веб-конфигурацию, как показано ниже
<system.web>
<identity impersonate="true"
userName="User Name"
password="Password" />
`enter code here`</system.web>
перезапустить IIS и снова проверить
-tony -
Ответ 14
Перешел через эту проблему два дня назад, провел целых два дня, поэтому я обнаружил, что мне нужно предоставить доступ к группе пользователей IUSR
DCOMCNFG → Свойства моего компьютера → Безопасность связи → Разрешение запуска и активации → Изменить значения по умолчанию и предоставить все права на IUSR.
надеюсь, что это поможет кому-то....