Psudonym Ответов: 4

Выполнение командной строки через C# не работает


Привет,

Я новичок в C# и пытаюсь разработать приложение, которое будет работать...

1. Откройте командную строку при нажатии кнопки
2. Перейдите в определенную папку (где XYZ.exe копируется)
3. выполните некоторые команды на XYZ.exe.

Я искал в google и написал какой-то код, который открывает командную строку, но ничего не выполняет. Я вижу только пустую командную строку.
Вот код...

private void btn_Merge_Click(object sender, EventArgs e)
        {
            ProcessStartInfo commandInfo = new ProcessStartInfo(); /// ("cmd.exe", "/K");
            commandInfo.WorkingDirectory = @"D:\TOOLS\" ; ///@"c:\";
            commandInfo.UseShellExecute = false;
            commandInfo.RedirectStandardInput = true;
            commandInfo.RedirectStandardOutput = true;
            commandInfo.FileName = "cmd.exe";
            commandInfo.Arguments = "srecord - 1.63 - win32\\srec_cat D:\\FLASH\\BOOT123.hex";
            
            Process process = Process.Start(commandInfo);
            
            command.Close();

        }




Пожалуйста, скажите мне, где я ошибаюсь.

Что я уже пробовал:

СВУ, выполняющее только commandInfo.Аргументы = "/ C ipconfig"; но даже это не сработало.

Я тоже пробовала, создание экземпляра процесса...

Process Command = new Process();

Command.start();
Command.StandardInput.WriteLine("srecord - 1.63 - win32\\srec_cat D:\\FLASH\\BOOT123.hex");
Console.WriteLine(command.StandardOutput.ReadToEnd());

// string result = command.StandardOutput.ReadToEnd();
// Display the command output.
// Console.WriteLine(result);

Kornfeld Eliyahu Peter

Почему вы должны открывать командную строку (cmd.exe), перейдите непосредственно к вашему собственному исполняемому файлу...

PIEBALDconsult

Может быть, вам понравится мой
https://www.codeproject.com/Articles/70864/ProcessCommunicator

4 Ответов

Рейтинг:
2

OriginalGriff

Когда вы выполняете cmd.exe он запускает командную строку, он не принимает параметры в качестве пользовательского ввода в командное поле, он использует их в качестве параметров для команды cmd.
И это означает, что он вообще не понимает ваших аргументов: CMD.exe (командная оболочка) - Windows CMD - SS64.com[^]
Вы могли бы сделать это-возможно - с помощью /C или /K, а затем команды, которую вы хотите выполнить, но предполагая, что srecord это приложение, которое вы хотите запустить, лучшим решением было бы выполнить его напрямую:

commandInfo.FileName = "srecord";
commandInfo.Arguments = "- 1.63 - win32\\srec_cat D:\\FLASH\\BOOT123.hex";

Process process = Process.Start(commandInfo);


Рейтинг:
2

Richard MacCutchan

Я только что попробовал что-то подобное, и это прекрасно работает. Попробуйте следующие изменения, чтобы вы действительно могли видеть, что происходит:

commandInfo.RedirectStandardInput = false;
commandInfo.RedirectStandardOutput = false;
commandInfo.FileName = "cmd.exe";
commandInfo.Arguments = "/k srecord - 1.63 - win32\\srec_cat D:\\FLASH\\BOOT123.hex";


Psudonym

Да... нужно сделать его ложным. Я пытался с Правдой.
В принципе, true работает с консольным приложением. Мой-это бланк заявления
Я понял это после попытки :) :) :)

Рейтинг:
1

Psudonym

Ребята,

это сработало...

private void ExecuteSrecCommand(String strCommand)
{
    ProcessStartInfo commandInfo = new ProcessStartInfo();
    commandInfo.WorkingDirectory = @"D:\\TOOLS\\srecord-1.63-win32";
    commandInfo.CreateNoWindow = true;
    commandInfo.UseShellExecute = false;
    commandInfo.RedirectStandardInput = false;
    commandInfo.RedirectStandardOutput = false;
    commandInfo.FileName = "cmd.exe";
    commandInfo.Arguments = strCommand;
    Process process = Process.Start(commandInfo);
    process.Close();
}


Теперь есть еще одна проблема.

приведенный выше код открывает командную строку и выполняет команду.
Но сам процесс.Close () не закрывает / не удаляет командную строку. В диспетчере задач я вижу, что многие экземпляры командной строки открыты.

Я попытался закрыть commandInfo, но commandInfo. Close не существует :(

Пожалуйста, дайте мне знать, как закрыть командную строку при выходе из функции.


Nelek

Пожалуйста, не используйте решения, чтобы публиковать больше информации о вашей проблеме. Вы можете использовать виджет "редактировать" вашего исходного вопроса. Просто обязательно уточните, что вы добавили, тогда люди, читающие, ответят или отредактируют свои существующие решения

Рейтинг:
1

Psudonym

Что ж,

даже Командная строка может быть закрыта.

Я использовал

commandInfo.Arguments = "/C " + strCommand + " & exit"; 


и он закрывает командную строку после выполнения команды.

Если есть какой-либо другой способ, пожалуйста, поделитесь.


Nelek

Пожалуйста, не используйте решения, чтобы публиковать больше информации о вашей проблеме. Вы можете использовать виджет "редактировать" вашего исходного вопроса. Просто обязательно уточните, что вы добавили, тогда люди, читающие, ответят или отредактируют свои существующие решения