Подтвердить что ты не робот

"Получение 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.

4b9b3361

Ответ 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

  • предоставлять права на чтение/запись пользователям или группам IIS

  • Пуск → run → inetmgr

    включить аутентификацию ASP.NET для веб-сайта по умолчанию

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

Ответ 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.

надеюсь, что это поможет кому-то....