Как запустить bat-файл на стороне веб-сервера Asp.net? - PullRequest
1 голос
/ 30 марта 2011

Мне нужно вызвать консольное приложение для загрузки данных в другое настольное приложение на удаленном сервере, расположенном в корпоративном домене.

Пользователи зайдут на веб-страницу и загрузят данные на веб-сервер asp.net, который после преобразования должен вызвать это консольное приложение. Пользователи расположены удаленно и не имеют никакого другого доступа, кроме веб-сервера.

Я решил понизить контекст веб-приложения безопасности и позволить рабочему процессу asp.net запустить консольное приложение на текущем веб-сервере IIS 6.0

Что я сделал:

  • Я изменил учетную запись безопасности для пула приложений для локальной системы;
  • Я добавил учетную запись ASPNET и учетную запись процесса IIS IIS_WPG в группу администраторов;
  • Я добавил «Разрешить службе взаимодействовать с desctop» для процессов «Служба администрирования IIS» и «Служба публикации в Интернете» и перезапустил компьютер;

Я пытался запустить BAT-файл на стороне сервера через код тестовой страницы, но не смог:

protected void btnStart_Click(object sender, EventArgs e)
{
    Process process = new Process(); 
    process.StartInfo.FileName = @”C:\run.bat”; 
    process.StartInfo.UseShellExecute = false;
    process.Start();
    process.WaitForExit();  
}

Ошибка была access denied.

Пожалуйста, помогите мне найти любую подходящую идею, как запустить bat-файл на стороне веб-сервера. Спасибо

Ответы [ 3 ]

4 голосов
/ 30 марта 2011

Попробуйте установить UseShellExecute в true вместо false.В конце концов, командные файлы запускаются в оболочке - поэтому вам нужна оболочка для ее выполнения.(Другой вариант - запустить cmd.exe и передать имя пакетного файла в качестве аргумента, например, «cmd.exe /kc:\run.bat")

. Вы также можете попробовать создатьпростое приложение .NET, которое просто (скажем) создает файл с отметкой времени. Таким образом, вы можете проверить бит «могу ли я запустить другой процесс» отдельно от бита «можно ли заставить пакетный файл работать».

3 голосов
/ 10 мая 2013

Поместите этот конкретный пакетный файл в ваше приложение.

string str_Path = Server.MapPath(".") + "\\run.bat";
ProcessStartInfo processInfo = new ProcessStartInfo(str_Path);
processInfo.UseShellExecute = false;
Process batchProcess = new Process();
batchProcess.StartInfo = processInfo;
batchProcess.Start();
2 голосов
/ 30 марта 2011

Взгляните на этот пример: Запустите интерактивную командную оболочку или командные файлы из ASP.NET

В ней используется немного другой подход.Они предлагают запустить cmd.exe и выполнять командную строку за строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...