Назад | Перейти на главную страницу

IIS не запускает BAT-файл

Проблема, с которой мы столкнулись, заключается в следующем. У нас есть веб-служба ASP.NET, работающая под управлением IIS7. Код в WebService работает на 100%, однако, когда WebService пытается запустить .BAT файл ничего не происходит. Вообще ничего, код не вылетает, сервер нас ни о чем не предупреждает, вообще ничего.

Мы пробовали установить разрешения пользователя, мы пробовали разные способы запуска BAT, мы пробовали поиграть с реестром, cmd.exe также имеет полные права.

Сейчас мы совершенно не понимаем, что делать, любая помощь будет признательна.

(Примечание: старый ответ был отчасти правильным, отчасти неправильным. По умолчанию IIS не может выполнять экземпляры cmd.exe, но, по-видимому, это возможно ...)

Вы можете запускать командные файлы из IIS через ASP.NET, но для этого требуется, чтобы ваши настройки олицетворения были на 100% точными.

Я собираюсь предположить, для целей этого сообщения, что вы находитесь в очень безопасной среде, и вы уже рассмотрели все потенциальные векторы атак, которые могут быть открыты, разрешив IIS выполнять командные файлы (которые в экземплярах cmd .Exe.)

Таким образом, веб-процесс должен быть запущен либо с правами администратора (GAH!), Либо с другой учетной записью, которая может выполнять пакетный процесс. Я считаю, что это невозможно со встроенными учетными записями ASPNET / IUSR_.

Описана активация олицетворения здесь, в MSDN, и подать на это в суд.

Вы проверили, что разрешения cmd.exe позволяют IIS выполнять его? В моей системе учетная запись IIS по умолчанию не имела необходимых разрешений.

Вдруг у меня возникла яркая идея! Добавьте несколько строк «Echo sometext >> log.txt» в код файла .BAT, чтобы он генерировал некоторое протоколирование. Затем проверьте, действительно ли он записывает в этот файл журнала. Возможно, файл .BAT где-то ожидает ввода пользователя. Или он ждет, пока пользователь нажмет клавишу, чтобы закрыть окно консоли. Поскольку это будет сервер, на нем нет экрана, на котором будет отображаться консоль, поэтому он вечно ждет, пока пользователь нажмет клавишу на сервере.

Он должен работать как пользователь удостоверения вашего пула приложений, под которым работает веб-служба. Это пользователь, чтобы убедиться, что у него есть соответствующие разрешения на выполнение и запуск командного файла. Скорее всего, это не анонимный пользователь сайта, если вы не включили олицетворение. Это мое первое предположение.

В вызывающем коде ASP.NET вы должны иметь возможность получить код возврата или ответное сообщение. Если да, посмотрите, дает ли это какие-нибудь дополнительные подсказки.

Похоже, это было тихо отключено, вероятно, потому, что это похоже на популярный вектор атаки вредоносного ПО.

Есть ли у вас другой способ решения этой проблемы?