Запустите команду DOS в .NET

У меня есть набор команд вроде:

C:
cd Project
testproj.exe

Моя система получает эти команды одну за другой из удаленной системы. Мне нужно выполнить каждую команду в cmd.exe при получении команды от удаленной системы. Как выполнить их с помощью .NET?

Мне также нужно вернуть результат testproj.exe на удаленный компьютер. Как снять результат после выполнения команды?


person blitzkriegz    schedule 06.08.2009    source источник


Ответы (5)


Process.Start cmd.exe и перехватить StandardIn, StandardOut и StandardError. Затем, когда поступит команда, просто напишите ее в StandardIn и прочтите StandardOut / Error для возврата. Всего не должно быть больше 15 LOC.

При этом, вероятно, было бы проще просто установить Telnet Server - похоже, это то, что вы, по сути, реплицируете ...

person Mark Brackett    schedule 06.08.2009

var process = System.Diagnostics.Process.Start( "testproj.exe" );
process.WaitForExit();
var result = process.ExitCode;

На самом деле это не будет уважать такие вещи, как «C:» или «CD path». Вместо этого вы хотите создать командный файл во временной папке, а затем вызвать этот командный файл.

person Paul Alexander    schedule 06.08.2009
comment
Это не сработает. Вам нужен process.WaitForExit (), чтобы получить ExitCode. - person Adam Robinson; 06.08.2009

Взгляните на System.Diagnostics. Процесс. Вы можете перенаправить stdout / stderr куда-нибудь, чтобы получить результат.

person elan    schedule 06.08.2009

Операции C: и cd Project могут выполняться внутри приложения для загрузки с помощью класса Directory с помощью метода SetCurrentDirectory. .

Затем просто используйте класс Process для запуска исполняемого файла testproj.exe.

person jussij    schedule 06.08.2009

Вместо того, чтобы пытаться поддерживать все команды DOS, просто реализуйте небольшое подмножество, которое гарантирует, что ничего не пойдет не так. Например, не разрешать УДАЛЕНИЕ, RD, ФОРМАТИРОВАНИЕ и т. Д.

Итак, в основном у вас будет только подмножество команд DOS. Когда у вас есть набор команд, вы можете кодировать эти конкретные команды, используя механизмы расширения или как подключаемые модули.

Это также поможет вам обезопасить вашу машину от злонамеренных атак, и худшее, что может случиться, - это могут быть отправленные данные, но с машины данные / система никогда не пострадают.

ОБНОВЛЕНИЕ: реализация конкретных команд предоставляется вам. Вы можете использовать .NET API или иметь System.Diagnostics.Process

person Ramesh    schedule 06.08.2009