Как использовать больше команд DOS в C#
у меня есть около 7 команд в DOS, и я хочу запустить их в своей программе на C#. Могу ли я сделать:
System.Diagnostics.Process.Start("cmd.exe", "my more commands here");
? EDIT: Я делаю небольшое приложение, которое будет запускать g++. Теперь это верно?:
System.Diagnostics.Process.Start("cmd.exe", "/k cd C:Alpscompiler /k g++ C:Alps" + project_name + "DebugMain.cpp");
команда для компиляции:
g++ -c C:Alpshere_is_projectnameDebugMain.cpp -o main.o
4 ответов
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();
Да, вы можете передать в командной строке с помощью переключателя" /C":
System.Diagnostics.Process.Start("cmd.exe", "/C dir");
вы также можете сделать следующее....
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"
});
вы можете запустить cmd.exe перенаправляет stdin и ноги, которые поток с вашими командами.
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;