Запуск cmd с C # и параметром - PullRequest
1 голос
/ 12 августа 2011

Я должен скомпилировать такую ​​игру

love "C: \ testgame"

в cmd.Поэтому я использую этот код, но кажется, что параметр неправильно интерпретирован.Также консоль закрывается через секунду.Но если я использую Messagebox.Show, я вижу, что команда в cmd та же, что я использую вручную (и это работает)

Process cmd = new Process();

        cmd.StartInfo.FileName = "cmd.exe";
        cmd.StartInfo.RedirectStandardInput =
        true;
        cmd.StartInfo.RedirectStandardOutput =
        true;
        cmd.StartInfo.CreateNoWindow = false;
        cmd.StartInfo.UseShellExecute = false;

        cmd.Start();
        cmd.StandardInput.Write(@"cd %ProgramFiles(x86)%\LOVE\");
        MessageBox.Show("love \""+fldBrowDiag.SelectedPath.ToString()+@"\"+lsb_projects.SelectedItem.ToString()+"\"");
        cmd.StandardInput.Close();
        cmd.Close();

Ответы [ 3 ]

4 голосов
/ 12 августа 2011

Во-первых, введенная вами команда "cd", вероятно, потерпит неудачу, потому что у вас нет кавычек вокруг аргумента.(эта переменная программных файлов будет содержать пробелы.)

Во-вторых, вместо прямой записи в stdin, возможно, стоит подумать об использовании переключателя "/ c", который даст команду cmd.exe выполнить указанные команды напрямую.Вы можете разделить команды с помощью '&&'.

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

Попробуйте, чтобы упростить вещи:

var process = Process.Start(
    new ProcessStartInfo(@"C:\Program Files (x86)\LOVE\love.exe", @"C:\game") {
        WorkingDirectory = @"C:\Program Files (x86)\LOVE" });
0 голосов
/ 12 августа 2011

Почему вы не можете просто запустить cmd с правильными аргументами для запуска вашего процесса?

Например, cmd /C love "c:\game" закрыть после завершения или cmd /K love "c:\game оставить открытым после завершения?

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