Ответ 1
У меня такая же проблема на машине клиента Windows Server 2003 с IIS6. Их сервер очень заблокирован по сравнению с обычными серверами, и что-то в этом блокировании, вероятно, является проблемой. Я не сталкивался с этой проблемой на десятках других серверов клиентов. Я еще не решил проблему, но вот некоторые шаги из того, что я узнал до сих пор...
Первое, что нужно сделать, - это дважды проверить, к какому пулу приложений подключено ваше приложение, а затем проверить, какой идентификатор использует пул приложений (например, сетевая служба или идентификатор пула приложений или...). Это важно для обеспечения того, чтобы вы предоставляли права правильному пользователю. Не идите дальше, пока не убедитесь в этом.
Затем проверьте, используете ли вы IIS Impersonation (возможно, вы не знаете, что это такое). Здесь пул приложений сортируется под именем пользователя... это было бы только в случае, если вы используете аутентификацию Windows, а в web.config у вас есть <identity impersonate="true" />
. Если вы используете олицетворение, то, вероятно, вы должны предоставить конечным пользователям весь необходимый файл и/или COM-доступ. Если нет (как в моем случае), то просто нужно проверить, права разрешены для пользователя пула приложений или группы пользователей IIS.
Как только вы узнаете правильное удостоверение для разрешений, выполните следующие действия:
- Если это 64-разрядная проверка машины, у вас есть
Enable 32-bit applications
для пула приложений (или у вас установлена 64-разрядная среда выполнения) - Проверка идентификатора пула приложений имеет доступ к папке
C:\Windows\Temp
(вы упомянули, что сделали это, но я думал, что перечислил его для всех, кто столкнулся с проблемой). - Проверить, что идентификатор пула приложений имеет доступ к папке Crystal Reports, например.
C:\Program Files\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\
. Вы можете найти папку, открыв файл regedit.exe и перейдите кHKEY_CLASSES_ROOT\CLSID\{4DB2E2BB-78E6-4AEA-BEFB-FDAAB610FD1B}\InProcServer32
. Получите путь от значения (по умолчанию) для этого раздела реестра и проверьте разрешения для родительской папки для этого пути. Попробуйте дать полный контроль папке с правильным идентификатором, чтобы узнать, устраняет ли это проблему. -
Я не уверен, что это актуально, но, возможно, добавление
<startup useLegacyV2RuntimeActivationPolicy="true">
в web.config может помочь... было предложено в этот пост, относящийся к другому COM-приложению, имеющему схожие проблемы, поэтому стоит пойти? Поэтому вы должны добавить это внутри тега в web.config:<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/> </startup>
-
Проверьте разрешения COM на сервере:
- откройте "Службы компонентов" с панели управления > "Администрирование"
- разверните узел Службы компонентов > Компьютеры > Мой компьютер затем щелкните правой кнопкой мыши > Свойства
- щелкните вкладку "Безопасность COM"
- В разрешениях запуска и активации нажмите кнопку "Изменить по умолчанию..."
- Проверьте перечисленные разрешения на разрешение запуска и активации. Если пользователь вашего пула приложений не указан, попробуйте добавить его со всеми разрешениями разрешить и разрешить 4. Если это не решит проблему, отмените любые изменения.
- Если ни одна из этих проблем не решила его, я предлагаю загрузить Process Monitor и попытаться определить, что он пытается сделать, что попадает в Access Denied. Это следующий шаг для меня по проблеме, поэтому, если я найду что-нибудь, я обновлю этот ответ.