Перевод команды Windows в C # для Atmel Studio 7 - PullRequest
0 голосов
/ 05 октября 2019

Я пытался запустить команду Windows, используя утилиту Atmel Studios atprogram, которая не совсем уместна, но помогает в контексте.

Ниже приведен мой код, и идея заключается в том, что вывод изКоманда помещается в расширенное текстовое поле. Это завершено в разделе «AddTestJigString (output)».

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        string command = cmd();
        Process process = new Process();
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.UseShellExecute = false;
        startInfo.RedirectStandardOutput = true;
        startInfo.FileName = "CMD.exe";
        startInfo.Arguments = "/c cd " + ((char)34) + Path.GetDirectoryName(Properties.Settings.Default.Preferredatprogram) + ((char)34) + " && atprogram.exe - t avrispmk2 - i isp - d ATtiny26 - v chiperase program -f 30 - 5004_U21_V0.7.hex write - fs--values 61F6";
        process.StartInfo = startInfo;
        process.Start();
        string output = process.StandardOutput.ReadToEnd();
        AddTestJigString(output);
        process.WaitForExit();
    }

Ключевая строка;

    startInfo.Arguments = "/c cd " + ((char)34) + Path.GetDirectoryName(Properties.Settings.Default.Preferredatprogram) + ((char)34) + " && atprogram.exe - t avrispmk2 - i isp - d ATtiny26 - v chiperase program -f 30 - 5004_U21_V0.7.hex write - fs--values 61F6";

Если я изменю это значение на просто;

    startInfo.Arguments = "/c cd " + ((char)34) + Path.GetDirectoryName(Properties.Settings.Default.Preferredatprogram) + ((char)34) + " && atprogram.exe";

Я получу вывод справки / списка доступных командв моем текстовом поле от atprogram.exe, так что я делаю что-то правильно. Однако, как только будут добавлены какие-либо параметры, выходные данные будут полностью пустыми.

1 Ответ

0 голосов
/ 09 октября 2019

Спасибо за ответы, приведенные выше.

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

Следующее решение, которое мне удалось получить:

    {
        string comhex = Path.GetFullPath(Properties.Settings.Default.PreferredComHex);
        return "/c atprogram -t avrispmk2 -i isp -d ATtiny26 -v chiperase program -f " + ((char)34) + comhex + ((char)34) + " write -fs --values 61F6 2>&1";
    }

Ключевой частью являются "2> & 1", которые я добавил в конец командной строки. Это фактически говорит команде о перенаправлении как стандартного вывода (stdout), так и стандартной ошибки (stderr). 2 из которых являются stderr, а 1 - stdout.

Для дальнейшего чтения / справки:

Что означает в оболочке "2> & 1"?

https://support.microsoft.com/en-gb/help/110930/redirecting-error-messages-from-command-prompt-stderr-stdout

...