【发布时间】:2011-07-05 21:46:03
【问题描述】:
我的代码中有一个部分,我在其中调用批处理文件并为其提供某些参数。该批处理文件调用另一个批处理文件,依此类推。整个过程大约需要 45 分钟才能完成。我还需要等待批处理文件完成,然后再继续执行其余代码(在批处理文件之后清理等)。
我的问题是,尽管我尝试了几种不同的方法,但我无法让批处理文件完成其运行以及将其输出写入日志文件。
这是我为使批处理文件完成运行所做的工作:
Process process = new Process();
process.StartInfo.WorkingDirectory = Path.GetDirectoryName(filename);
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = false;
process.StartInfo.FileName = filename;
process.Start();
process.WaitForExit();
为了启用日志记录,我尝试了很多方法。这只是最新的尝试。
Process process = new Process();
process.StartInfo.WorkingDirectory = Path.GetDirectoryName(filename);
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.FileName = filename;
process.Start();
StreamReader sr = process.StandardOutput;
StreamWriter sw = new StreamWriter(exelocation + @"Logs\" + version + "\\" + outputname + ".txt");
while (!process.HasExited)
{
sw.Write(sr.ReadToEnd());
}
这段代码基本上使它成为第一个批处理文件中的一个微不足道的部分并停在那里。批处理文件运行不到一分钟。我不明白为什么会这样。如果不重定向标准输出并创建一个窗口,它会完美运行,但如果隐藏窗口并且重定向标准输出,它什么也不做?
【问题讨论】:
-
在
sw.Write(sr.ReadToEnd());行放一个断点,看看该行是否完成执行并进入下一个循环
标签: c# process waitforexit