gpt4 book ai didi

c# - 使用 RedirectStandardOutput 运行 ChkDsk

转载 作者:行者123 更新时间:2023-11-30 17:02:14 25 4
gpt4 key购买 nike

在不重定向 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com