Как отметил @Hakeem, System.Diagnostic.Process
не имеет статического Run
метода.Я думаю, что вы имеете в виду метод Start.
После того, как вы завершили сборку командного файла, просто запустите его, используя следующий код:
Process p = new Process();
p.StartInfo.FileName = batchFilePath;
p.StartInfo.Arguments = @"-a arg1 -b arg2";
p.Start();
Обратите внимание, что символ @
должен иметь префикс к строке аргумента, поэтомусимволы escape-последовательности, такие как \
, рассматриваются как литералы.
Альтернативный код
Process.Start(batchFilePath, @"-a arg1 -b arg2");
или
ProcessStartInfo processStartInfo = new ProcessStartInfo();
processStartInfo.FileName = batchFilePath;
processStartInfo.Arguments = @"-a arg1 -b arg2";
Process.Start(processStartInfo);
Дополнительная информация
Пример многокомандного командного файла
dir /O
pause
dir
pause
Сохранить этот файл как.bat, а затем выполнить с помощью метода Start.В этом случае вы можете указать аргумент с командой в самом пакетном файле (в приведенном выше примере для команды dir
указана опция /O
.
Я полагаю, вы уже выполнили часть создания пакетного файла), теперь просто добавьте аргументы к командам в пакетном файле.
Перенаправление ввода в процесс
Поскольку вы хотите отправить несколько команд одному и тому же процессу cmd, вы можете перенаправитьстандартный ввод процесса для получения ввода от вашей программы, а не от клавиатуры.
Код основан на аналогичном вопросе по адресу: Выполните несколько командных строк с одинаковымипроцесс с использованием C #
private string ProcessRunner()
{
ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe");
processStartInfo.RedirectStandardInput = true;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.UseShellExecute = false;
Process process = Process.Start(processStartInfo);
if (process != null)
{
process.StandardInput.WriteLine("dir");
process.StandardInput.WriteLine("mkdir testDir");
process.StandardInput.WriteLine("echo hello");
//process.StandardInput.WriteLine("yourCommand.exe arg1 arg2");
process.StandardInput.Close(); // line added to stop process from hanging on ReadToEnd()
string outputString = process.StandardOutput.ReadToEnd();
return outputString;
}
return string.Empty;
}
Метод возвращает выходные данные выполнения команды. Аналогичным образом можно также перенаправить и прочитать поток StandardOuput процесса.