IIS не может получить доступ к файлу Excel для пользователей, но для меня это нормально. Почему?

У меня есть программа, работающая как служба в IIS в Windows Server 2008 R2. В программе нет проблем с созданием отчета в Excel. Проблема возникает, когда он пытается получить доступ к только что созданному Excel. Это дает пользователям ошибку 80070005 прямо в этой строке кода:

Excel.Application excelSS = null;
excelSS = new Excel.Application(); <-- Error

Поскольку на тот момент программа еще не пыталась получить доступ к файлу Excel, я считаю, что проблема не связана с отсутствием прав доступа к файлу. Я считаю, что проблема может быть связана с поиском программы Excel. Возможно, это связано с тем, что Excel является 32-разрядным, а операционная система Windows — 64-разрядной. Я не уверена.

Странно то, что у меня нет проблем с просмотром отчета Excel через IIS. У другого айтишника тоже нет проблем с этим. Но все обычные пользователи сталкиваются с этой проблемой, пытаясь сделать то же самое. Это все указывает на высокую вероятность того, что данная проблема связана с "правами доступа". Если это связано с настройкой Excel, я бы предположил, что у всех, включая меня, будет такая же проблема. Это очень озадачивает.

Я уже испробовал все советы, которые смог найти в Интернете:

  • Убедитесь, что пулы приложений в IIS используют учетную запись пользователя IIS APPPOOL\DefaultAppPool.

  • Добавьте папку «Рабочий стол» в system32 и SysWOW64 в config\systemprofile и убедитесь, что учетная запись пользователя IIS APPPOOL\DefaultAppPool имеет доступ для чтения/записи к этим папкам.

  • Запустите DCOM-Config и назначьте права локального доступа/запуска/активации для IIS APPPOOL\DefaultAppPool в разделе COM-Security. И убедитесь, что и 32-разрядная, и 64-разрядная версия DCOM-Config получают эти настройки.

  • Из-за того, что пользователи используют «Аутентификацию Windows» для запуска программы в IIS, я также удостоверяюсь, что пользователи могут использовать свою учетную запись для доступа к папке на сервере IIS, в которой хранится файл Excel.

  • Я даже добавляю IIS APPPOOL\DefaultAppPool в группу локальных администраторов.

Единственный совет, который я не могу попробовать, заключается в том, что я не могу найти «Приложение Microsoft Excel» в списке программы DCOM-Config («Службы компонентов» -> «Компьютеры» -> «Мой компьютер» -> «Конфигурация DCom»). Я должен добавить права запуска/активации доступа к IIS APPPOOL\DefaultAppPool в «Приложение Microsoft Excel» в этом списке. Но почему-то "Приложение Microsoft Excel" в списке нет. Я пытался найти его в DCOM-Config в папках System32 и SysWOW64. Это "кажется" похоже на проблему. Но я не уверен в этом из-за того, что у меня нет проблем с просмотром отчета Excel с использованием моей учетной записи пользователя. Если бы что-то было не так с настройками в Excel, я бы подумал, что никто из нас не сможет просмотреть отчет Excel.

У меня не было этой проблемы, когда у меня была эта программа в Windows Server 2003 R2 - 32-разрядная версия или в 32-разрядной версии Windows XP.

Я понимаю проблему, связанную с тем, что Microsoft хочет, чтобы люди не использовали Office Automation в Windows Server 2008. И Microsoft хочет, чтобы люди использовали XML или что-то в этом роде. Но я также понимаю, что люди пробовали это и могут обойти это. Поскольку я не являюсь разработчиком этой программы, я действительно не хочу начинать изменять эту программу. Поэтому я хотел бы иметь возможность заставить существующую программу работать.

Пожалуйста помоги. Заранее спасибо.

Джей Чан


person Jay Chan    schedule 18.02.2015    source источник


Ответы (1)


Оказалось, что эта проблема связана с правами доступа. Похоже, что ASP.NET работал под аутентификацией пользователя (неудивительно, потому что я настроил веб-службу на использование «Аутентификации Windows»). И у пользователя нет разрешения запускать Excel непосредственно на сервере. Решение состоит в использовании специальной учетной записи пользователя домена: (1) назначьте специальную учетную запись пользователя в качестве локального администратора, (2) назначьте специальную учетную запись пользователя в качестве «конкретного пользователя» для «олицетворения ASP.NET» для веб-службы.

У меня такое ощущение, что специальная учетная запись пользователя каким-то образом была встроена в эту конкретную веб-службу. Поэтому исправление, о котором я упоминал выше, может работать или не работать для других людей. К сожалению, я не знаю, правда это или нет, потому что я не был разработчиком этого веб-сервиса. И я не могу найти ни одного места в веб-службе, где бы упоминалось что-либо, связанное с этой конкретной учетной записью пользователя.

Я рад, что это исправлено.

Джей Чан

person Jay Chan    schedule 19.02.2015
comment
Мне также нужно изменить идентификатор приложения Microsoft Excel с запускающего пользователя на интерактивного пользователя. Это изменено в DCOM-Config --> Службы компонентов --> Компьютеры --> Мой компьютер --> DCOM Config --> Приложение Microsoft Excel --> Щелкните правой кнопкой мыши и перейдите к свойствам. - person Jay Chan; 19.02.2015
comment
Это тоже ответ на этот вопрос? stackoverflow.com/questions/49208958/ - person abksharma; 22.07.2019