在不重定向 StandardOutput
的情况下运行 ChkDsk
不会出现如下错误:
var processStartInfo = new ProcessStartInfo(@"chkdsk.exe", "D:");
processStartInfo.UseShellExecute = false;
var process = Process.Start(processStartInfo);
process.WaitForExit();
if (process.ExitCode != 0)
throw new Exception("did not work");
当重定向 StandardOutput 时,进程以 ExitCode 3
结束。
var processStartInfo = new ProcessStartInfo(@"chkdsk.exe", "D:");
processStartInfo.RedirectStandardOutput = true;
processStartInfo.UseShellExecute = false;
var process = Process.Start(processStartInfo);
process.WaitForExit();
if (process.ExitCode != 0)
throw new Exception("did not work");
用例如做同样的事情net use 和重定向的 StandardOutput 正常工作
var processStartInfo = new ProcessStartInfo(@"net ", "use");
为什么?如何执行 chkdsk
并重定向 StandardOutput
?
环境:Win 7 Pro x64,禁用 UAC,以管理员身份登录,Dot Net 4.0,VS 2012,WPF 应用程序
最佳答案
我只是毫无问题地运行了这段代码,退出代码为 0
。
var cd = RunProcessDirect("chkdsk.exe", "c:", false);
protected ConsoleData RunProcessDirect(string processPath, string args,
bool isHidden)
{
Process process = SetupProcess(processPath, args, isHidden);
process.Start();
ConsoleData data = new ConsoleData();
data.StandardOutput = process.StandardOutput.ReadToEnd();
data.StandardError = process.StandardError.ReadToEnd();
data.ExitCode = process.ExitCode;
return data;
}
private Process SetupProcess(string processPath, string args,
bool isHidden)
{
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = isHidden
? ProcessWindowStyle.Hidden
: ProcessWindowStyle.Normal;
startInfo.CreateNoWindow = isHidden;
startInfo.FileName = processPath;
startInfo.Arguments = args;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
process.StartInfo = startInfo;
return process;
}
public class ConsoleData
{
public string StandardOutput { get; set; }
public string StandardError { get; set; }
public int ExitCode { get; set; }
}
cd.StandardOutput
包含程序的所有文本输出,cd.StandardError
为空,cd.ExitCode
为 0
。
不要担心 IsHidden
的东西,那只是我的方法的额外天赋,我不想起飞。
关于c# - 使用 RedirectStandardOutput 运行 ChkDsk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20076929/