Вопрос по exe, c#, batch-file – Выполнение файла C # .bat с перенаправлением ошибок и вывода

1

У меня есть файл .bat для выполнения.

Внутри этого.bat файл, в конце этого кода

START _file_creator.bat %some_arg_name%
ENDLOCAL
EXIT

Я не хочу показывать окно во время выполнения, а также я должен ждать, пока операция, выполняемая этим.bat файл завершается, а затем прекращает выполнение (в конце операции я вижу стандартный текст "Нажмите любую клавишу, чтобы продолжить"). Мне также нужно проверить вывод и ошибки в этом файле, поэтому я пытаюсь использовать этот код:

        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo.FileName = @"C:\m_f\_config.bat";
        proc.StartInfo.RedirectStandardError = true;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.CreateNoWindow = true;

        proc.Start();
        proc.WaitForExit();
        output1 = proc.StandardError.ReadToEnd();
        proc.WaitForExit();
        output2 = proc.StandardOutput.ReadToEnd();
        proc.WaitForExit();

Но все, что я получаю, это ошибка

Windows can not find file "_file_creator.bat".
Make sure you typed the name correctly and try again.

конечно, если я бегу это.bat файл сproc.StartInfo.UseShellExecute = true он работает нормально, но в этом случае я не могу установитьRedirectStandardError = true а такжеRedirectStandardOutput = true

Как это исправить?

Edit

используя этот код, он работает сейчас

 proc.StartInfo.FileName = @"C:\m_f\_config.bat";
 proc.StartInfo.WorkingDirectory = @"C:\m_f\";

Ваш Ответ

1   ответ
3

_file_creator.bat где-то вPATH, Увидетьдокументация о рабочем каталоге в сочетании сUseShellExecute:

The WorkingDirectory property behaves differently depending on the value of the UseShellExecute property. When UseShellExecute is true, the WorkingDirectory property specifies the location of the executable. If WorkingDirectory is an empty string, it is assumed that the current directory contains the executable.

When UseShellExecute is false, the WorkingDirectory property is not used to find the executable. Instead, it is used only by the process that is started and has meaning only within the context of the new process. When UseShellExecute is false, the FileName property must be a fully qualified path to the executable.

Это не имеет значения. Рабочий каталог унаследован от вашей программы на C #, как показано в приведенной выше цитате. Вы должны сами установить рабочий каталог для нового процесса, чтобы он работал.
файл _file_creator.bat находится в том же каталоге, что и исполняемый файл .bat Tony

Похожие вопросы