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 = trueRedirectStandardOutput = true

如何解决?

编辑

使用该代码现在可以使用

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

1 回答 1

3

尝试正确设置工作目录或确保它_file_creator.bat位于PATH. 请参阅有关工作目录的文档UseShellExecute以及:

WorkingDirectory属性的行为因UseShellExecute属性的值而异。当UseShellExecutetrue时,WorkingDirectory属性指定可执行文件的位置。如果WorkingDirectory是一个空字符串,则假定当前目录包含可执行文件。

UseShellExecutefalse时,WorkingDirectory属性不用于查找可执行文件。相反,它仅由已启动的进程使用,并且仅在新进程的上下文中才有意义。当UseShellExecutefalse时,FileName属性必须是可执行文件的完全限定路径。

于 2012-06-24T12:50:46.187 回答