Получить exitcode из процесса с помощью аргументов

#c# #cmd #process

#c# #cmd #процесс

Вопрос:

Я пытаюсь запустить процесс CMD из моей программы, который запускает другой процесс, который перенаправляет вывод и ошибки в файл. И у меня должен быть код выхода этого процесса.

 var exe = pathToExe
var output = Path.GetTempFileName();
var process = Process.Start(new ProcessStartInfo
{
     FileName = "cmd",
     Arguments = $"/c "{exe} {command} > {output} 2<amp;1" amp; echo %errorlevel% > {output})", 
     Verb = "runas",
     UseShellExecute = true,
     CreateNoWindow = true,
     WindowStyle = ProcessWindowStyle.Hidden
});
                
process.WaitForExit();
var res = File.ReadAllText(output);
Console.WriteLine(res);
 

Та же команда (cmd / c «pathToExe command > output 2<amp;1» amp; echo%errorlevel% > output) отлично работала в cmd, но в этом коде уровень ошибки всегда равен 0 (я предполагаю, что это просто уровень ошибки процесса cmd)

На этом этапе вы можете спросить меня, почему я вообще использую cmd для запуска процесса… Ну, я пробовал

 using (var process = CreateProcess(processName, argumnets))
{
    var error = 0;
    var output = Path.GetTempFileName();
    process.StartInfo.UseShellExecute = true;
    process.StartInfo.Verb = "runas";   
    process.StartInfo.Arguments = $"{command} > {output} 2<amp;1";
    process.Start();
    process.WaitForExit();
    statusInfo = File.ReadAllText(output);
    File.Delete(output);
    if (process.ExitCode != 0)
    {
        error = process.ExitCode;
    }
    return error;
}
 

Но у меня это не сработало.
Также я не могу перенаправить выходные данные программно из-за процесса.StartInfo.UseShellExecute.

Комментарии:

1. Какой конкретный процесс вы пытаетесь запустить? Почти всегда неправильно начинать cmd.exe .

2. Это мой программный процесс, также написанный мной. Если это неправильно, то как я могу выйти из процесса, запущенного с помощью Verb = «runas»?

3. Ну, я запустил, есть его код. У меня это не сработало

4. Вы не можете этого сделать {command} > {output} 2<amp;1" , поскольку последний бит обрабатывается интерпретатором команд (cmd.exe ). Пожалуйста, объясните, почему вы хотите 2<amp;1 .

5. Потому что я хочу иметь и стандартный вывод, и стандартный вывод в моем файле.