Как использовать больше команд DOS в C # - PullRequest
6 голосов
/ 09 августа 2011

У меня около 7 команд в DOS, и я хочу запустить их в моей программе на C #.Могу ли я сделать:

System.Diagnostics.Process.Start("cmd.exe", "my more commands here");

? РЕДАКТИРОВАТЬ: Я делаю небольшое приложение, которое будет работать g ++.Теперь это правильно?:

 System.Diagnostics.Process.Start("cmd.exe", "/k cd C:\\Alps\\compiler\\ /k g++ C:\\Alps\\" + project_name + "\\Debug\\Main.cpp");

Команда для компиляции:

g++ -c C:\Alps\here_is_projectname\Debug\Main.cpp -o main.o

Ответы [ 4 ]

7 голосов
/ 09 августа 2011
cmd.exe /k <command>
cmd.exe /c <command>

Оба действительны.

  • /k выполнит команду и оставит вас с пустым приглашением (вероятно, менее желательным в вашем приложении, если вы просто хотитевыполнить для обратной связи.)
  • /c выполнит команду и закроет окно после ее завершения.

Если вы хотите выполнитькоманду из определенного каталога вы можете сделать:

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe");
p.StartInfo.Arguments = String.Format(@"/c g++ ""C:\Alps\{0}\Debug\Main.cpp""", project_name);
p.StartInfo.WorkingDirectory = @"C:\Alps\compiler";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.ErrorDialog = false;
p.Start();
7 голосов
/ 09 августа 2011

Да, вы можете передать в командной строке, используя ключ "/ C":

System.Diagnostics.Process.Start("cmd.exe", "/C dir");
3 голосов
/ 09 августа 2011

Вы также можете сделать следующее ....

Process.Start(new ProcessStartInfo()
{
 Arguments = "args",
 WorkingDirectory = "C:\SomePath",
 UseShellExecute= true,
 FileName = ".exe"
});

В processstartinfo также есть опции для перенаправления ввода и вывода, если вам нужно

Например ..

Process.Start(new ProcessStartInfo()
{
 Arguments = "C:\\Alps\\" + project_name + "\\Debug\\Main.cpp",
 WorkingDirectory = "C:\\Apls\\",
 UseShellExecute= true,
 FileName = "g++.exe"
});
2 голосов
/ 09 августа 2011

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

 process.Start(...);


                    process.StandardInput.WriteLine("Dir xxxxx");
                    process.StandardInput.WriteLine("Dir yyyyy");
                    process.StandardInput.WriteLine("Dir zzzzzz");
                    process.StandardInput.WriteLine("other command(s)");

Конечно, вы должны помнить, чтобы установить информацию о звезде процесса, чтобы сказать, что вы хотите перенаправить ввод:

 ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe);
        processStartInfo.CreateNoWindow = true;

        processStartInfo.ErrorDialog = false;

        processStartInfo.RedirectStandardInput = true;
...