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 Config). Я должен добавить права запуска / активации доступа к IIS APPPOOL\DefaultAppPool в "Приложение Microsoft Excel" в этом списке. Но почему-то "Приложения Microsoft Excel" нет в списке. Я попытался найти его в DCOM-Config в папках System32 и SysWOW64. Это "кажется" как то, где проблема. Но я не уверен в этом из-за того, что у меня нет проблем с просмотром отчета Excel с использованием моей учетной записи. Если бы что-то не так с настройками в Excel, я бы подумал, что никто из нас не сможет просмотреть отчет Excel.
У меня не было этой проблемы, когда у меня была эта программа в Windows Server 2003 R2 - 32-разрядной или в Windows XP 32-разрядной.
Я понимаю проблему о том, что Microsoft хочет, чтобы люди не использовали Office Automation в Windows Server 2008. И Microsoft хочет, чтобы люди использовали XML или что-то подобное. Но я также понимаю, что люди пробовали это и могут обойти это. Поскольку я не разработчик этой программы, я действительно не хочу начинать менять эту программу. Поэтому я бы хотел, чтобы существующая программа работала.
Пожалуйста помоги. Заранее спасибо.
Джей Чан
1 ответ
Оказалось, эта проблема связана с правами доступа. Похоже, ASP.NET работал под аутентификацией пользователя (не удивительно, потому что я настроил веб-сервис на использование "Аутентификация Windows"). И у пользователя нет разрешения на запуск Excel прямо на сервере. Решение состоит в том, чтобы использовать специальную учетную запись пользователя домена: (1) назначить специальную учетную запись пользователя в качестве локального администратора, (2) назначить специальную учетную запись пользователя в качестве "Определенного пользователя" для "Олицетворение ASP.NET" для веб-службы.
У меня такое ощущение, что специальная учетная запись пользователя каким-то образом встроена в этот конкретный веб-сервис. Поэтому исправление, которое я упомянул выше, может работать, а может и не работать для других людей. К сожалению, я не знаю, правда это или нет, потому что я не был разработчиком этого веб-сервиса. И я не могу найти где-нибудь в веб-сервисе упоминание чего-либо, связанного с этой конкретной учетной записью пользователя.
Я рад, что это исправлено.
Джей Чан