我正在尝试使用C#在Windows pc上读取所有系统信息。这是我的代码:
public static string GetSystemInfo()
{
String command = "systeminfo";
ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe");
cmdsi.Arguments = command;
Process cmd = Process.Start(cmdsi);
cmd.WaitForExit();
return cmd.StandardOutput.ReadToEnd();
}
但是它只是打开一个控制台,不执行systeminfo
命令。
该如何解决?
答案 0 :(得分:3)
以下代码段有效
public static string GetSystemInfo()
{
String command = "/c systeminfo";
ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe");
cmdsi.Arguments = command;
cmdsi.RedirectStandardOutput = true;
cmdsi.UseShellExecute = false;
Process cmd = Process.Start(cmdsi);
var output = cmd.StandardOutput.ReadToEnd();
cmd.WaitForExit();
return output;
}
您应将RedirectStandardOutput
设置为true
并在调用WaitForExit
之前读取输出,否则根据MSDN
该示例通过调用避免死锁情况 p.WaitForExit之前的p.StandardOutput.ReadToEnd。僵局 如果父进程在之前调用p.WaitForExit可能会导致 p.StandardOutput.ReadToEnd,子进程将足够的文本写入 填充重定向的流。父进程将无限期等待 让子进程退出。
/c
意味着执行后终止cmd
答案 1 :(得分:1)
您需要在命令前加"/c"
String command = "/c systeminfo";
/c
表示您要执行以下命令
更新
ProcessStartInfo.RedirectStandardOutput
必须设置为true,如Pavel的回答所述。