Выполнение команды C # не работает - PullRequest
3 голосов
/ 10 августа 2011

У меня есть программа, в которой я хочу сделать следующее:

  1. Получить файл (тип неизвестен)
  2. Сохранить файл локально
  3. Выполнить некоторую команду (неизвестно) для файла

Я позаботился о шагах 1 и 2, но я борюсь за шаг 3. Я использую следующий код:

ПРИМЕЧАНИЕ: Тип файла и команда используются только для тестирования

//Redirects output
procStart.RedirectStandardOutput = false;
procStart.UseShellExecute = true;
procStart.FileName = "C:\\Users\\Me\\Desktop\\Test\\System_Instructions.txt";
procStart.Arguments = "mkdir TestDir";

//No black window
procStart.CreateNoWindow = true;

Process.Start(procStart);

Откроется документ .txt, но команда не будет выполнена (в папке test не будет testDir)

Предложения

Ответы [ 2 ]

3 голосов
/ 10 августа 2011

см. Здесь:

https://stackoverflow.com/search?q=+optimized+or+a+native+frame+is+on+top+of+the+call+stack

вы не должны так называть Response.End, потому что это завершает его.

2 голосов
/ 10 августа 2011

Я думаю, что проблема в том, что ваш Process не настроен должным образом.

Ваш текущий код откроет файл .txt, используя средство открытия файлов .txt по умолчанию (поскольку вы указали procStart.UseShellExecute = true;).затем установите procStart.Arguments = "mkdir TestDir"; Но на самом деле это вам не поможет, поскольку все, что произойдет, будет "mkdir TestDir", которые будут переданы в качестве аргументов командной строки для notepad.exe.

То, что вы действительно хотите, это либо:

  1. Отдельный ProcessStartInfo с FileName, установленным на cmd.exe (и установленным Arguments = "/C mkdir Test")
  2. Используйте метод CreateDirectory() напрямую.

Я бы предпочел # 2, поскольку он более четко показывает, что вы хотели бы сделать, но любой из них должен работать.

ОБНОВЛЕНИЕ : Если вам нужночтобы использовать опцию 1, вы должны использовать следующий код, чтобы увидеть, что идет не так:

Process userCommandProc = Process.Start(procStart);
userCommandProc.WaitForExit();

if (userCommandProc.ExitCode != 0)
{
    // Something has (very likely) gone wrong
}
else
{
    // Most likely working
}

Пара других замечаний:

  1. Этот процесс будет запущен на сервере,не клиентский компьютер.Если вам нужно последнее, вам не повезло, если вы хотите использовать веб-приложение.
  2. Этот вид обработки, вероятно, лучше оставить стандартному обработчику .ashx, чем веб-странице;загрузка страниц должна быть максимально быстрой.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...