在不重定向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?
环境:Win7专业版x64、禁用UAC、以管理员身份登录、Dot Net 4.0、VS 2012、WPF应用程序
发布于 2013-11-20 00:58:02
我刚刚运行了这段代码,没有问题,退出代码为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的东西,那只是我的方法上的额外天赋,我不想离开。
发布于 2013-11-20 01:14:36
您必须以管理员身份运行Visual Studio,它将执行,或者您可以添加一个应用程序清单文件(添加->新项->常规->应用程序清单文件),并将此行<requestedExecutionLevel level="asInvoker" uiAccess="false" />更改为此<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />,这将提示您以管理员身份重新启动visual studio。
发布于 2016-09-02 10:12:48
简单的答案是,在非控制台应用程序上启动控制台进程;如果您希望重定向标准输出,请也重定向标准输入(即使您不使用它)。
所以,只要在你的代码中添加下面两行,它就可以工作了。
processStartInfo.RedirectStandardInput = true;
processStartInfo.RedirectStandardError = true;https://stackoverflow.com/questions/20076929
复制相似问题