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

:)

У меня есть программное обеспечение, которое можно запустить из командной строки, и теперь я хочу, чтобы оно выполнялось прямо из моего приложения на C #.К сожалению, нет ошибки, но я все еще не могу это сделать.: (

Путь к файлу .exe программного обеспечения: C: \ program files \ mysoftware.exe

Я хотел бы ввести команду cd c: \ program files \ mysoftwareFolder entermysoftware.exe d: \ myfolder \ file1.xxx d: \ myfolder \ file2.xxx -mycommand enter exit

Приведенные выше команды очень хорошо работают в реальной командной строке, но они просто не работают из моегоКод C #.

Вот код:

        Process cmdprocess = new Process();
        System.Diagnostics.ProcessStartInfo startinfo = new System.Diagnostics.ProcessStartInfo();
        startinfo.FileName = "cmd";
        startinfo.WindowStyle = ProcessWindowStyle.Hidden;
        startinfo.CreateNoWindow = true;
        startinfo.RedirectStandardInput = true;
        startinfo.RedirectStandardOutput = true;
        startinfo.UseShellExecute = false;
        cmdprocess.StartInfo = startinfo;
        cmdprocess.Start();
        System.IO.StreamReader sr = cmdprocess.StandardOutput;
        System.IO.StreamWriter sw = cmdprocess.StandardInput;
        sw.WriteLine(@"echo on");
        sw.WriteLine(@"c:");
        sw.WriteLine(@"cd" +@"program files\mysoftwarefolder");
        sw.WriteLine(@"mysoftware.exe" +@"d:\myfolder\file1.xxx" +@"d:\myfolder\file2.xxx" +@"-mycommand");
        sw.WriteLine(@"exit");
        sw.Close();
        sr.Close();

Я думаю, что неправильные части могут быть "startinfo.FileName =" cmd ";" или как я набрал команду в коде, но я понятия не имею, как их исправить.: (

Пожалуйста, скажите мне, что я сделал не так. Я ценю каждый ваш ответ! :)))

ОБНОВЛЕНИЕ Спасибо за вашу помощь!Я попытался написать команду в командном файле, но она работает только в режиме отладки.(Я забыл сказать вам, ребята, что я разрабатываю веб-сервис.) Когда я запускаю свой внешний проект, который будет использовать этот сервис C #, он не будет работать.Я не знаю, должен ли я что-то добавить в свой код или нет.

помогите meeeeee pleaseeeee (T ___ T)

Ответы [ 3 ]

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

Вместо:

startinfo.FileName = "cmd";

Непосредственно используйте

startinfo.FileName = @"c:\program files\mysoftwarefolder\mysoftware.exe";

Затем передайте аргументы стартовой информации как

startinfo.Arguments = @"d:\myfolder\file1.xxx " +@"d:\myfolder\file2.xxx " +@"-mycommand";

Таким образом, весь код выглядит как:

        Process p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.FileName = @"c:\program files\mysoftwarefolder\mysoftware.exe";
        p.StartInfo.Arguments = @"d:\myfolder\file1.xxx " +@"d:\myfolder\file2.xxx " +@"-mycommand";
        p.Start();
        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

Если вам нужно увидеть вывод вашей программы, вы можете просто использовать строку вывода.

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

Запишите эти команды в пакетный файл и выполните пакетный файл.

В пакетном файле:

cd c:\program files\mysoftwareFolder 
mysoftware.exe
d:\myfolder\file1.xxx
d:\myfolder\file2.xxx -mycommand 
exit

Код:

Process cmdprocess = new Process();
ProcessStartInfo startinfo = new ProcessStartInfo();
startinfo.FileName = "path to batchfile.bat";
startinfo.WindowStyle = ProcessWindowStyle.Hidden;
startinfo.CreateNoWindow = true;
startinfo.RedirectStandardInput = true;
startinfo.RedirectStandardOutput = true;
startinfo.UseShellExecute = false;
cmdprocess.StartInfo = startinfo;
cmdprocess.Start();
1 голос
/ 13 августа 2011

2 вещи: я думаю, что у вас есть проблемы с интервалом, и вы не читаете результат этих команд.cmd, вероятно, говорит вам ... "не распознается как внутренняя или внешняя команда"

Если вы посмотрите, что вы бросаете в cmd, это будет:

echo on

c:

cdprogram files \ папка mysoftware

mysoftware.exed: \ myfolder \ file1.xxx

Это не будетработать, когда вы пытаетесь в cmd.CMD почти наверняка возвращает вам сообщения об ошибках, но вы никогда не читаете из sr, поэтому вы никогда не узнаете об этом.Я бы добавил некоторые пробелы и включил бы все пути в кавычки внутри, например так:

sw.WriteLine(@"echo on");
sw.WriteLine(@"c:");
sw.WriteLine("cd \"program files\\mysoftwarefolder\"");
sw.WriteLine("mysoftware.exe \"d:\\myfolder\\file1.xxx\" d:\\myfolder\\file2.xxx\" -mycommand");
sw.WriteLine(@"exit");
...