C#中调用CMD执行命令,为什么就是正常输出,并不是错误,反而在StandardOutput获取...
C#中调用CMD执行命令,为什么就是正常输出,并不是错误,反而在StandardOutput获取到空字符串,而在StandardError中获取正常的结果??太扯了这安装过java的朋友都知道,在CMD下执行 java -version打印如下:
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
然而我用C#代码,调用CMD执行这个命令,结果 standardOutputString是空字符串,standardErrorString 是上面的3行,这也太扯了吧。。。。换了4台电脑,全都如此,C# 的bug??
Process process = new Process();
process.StartInfo.FileName = "java";
process.StartInfo.Arguments = "-version";
// 不弹出CMD窗口而是静默执行
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.Start();
process.WaitForExit();
//
string standardOutputString = process.StandardOutput.ReadToEnd();
string standardErrorString = process.StandardError.ReadToEnd(); 使用--version就好了 谢谢分享!!!!!!! GPT:
在C#中调用CMD执行命令时,可以使用Process类来实现。在使用Process类时,可以通过设置ProcessStartInfo类的RedirectStandardOutput和RedirectStandardError属性来分别获取命令的标准输出和标准错误输出。
如果你在StandardOutput获取到的输出并不是错误信息,那么可能是因为命令本身并没有产生错误,或者错误信息被输出到了标准输出流中。你可以尝试将RedirectStandardError属性设置为true,然后通过StandardError属性获取错误信息。
另外,你也可以在CMD中手动执行命令,观察输出结果,以确定命令是否产生了错误信息。 感谢分享 感谢大佬 fuhohua 发表于 2023-6-19 22:20
使用--version就好了
请问你上面的是执行 java -help出现的么?
我在JDK 8下,就没有--version
-version 输出产品版本并退出 fuhohua 发表于 2023-6-19 22:20
使用--version就好了
不行哎。我在JDK 8下,报不存在 --version命令
Unrecognized option: --version
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
这应该是java自身的问题,我现在的java是兼容-version与--version两个参数,-version就如楼主一样
你试一下别的命令,如:dotnet --version 或 python --version,都是StandardOutput
我的java 是openjdk 11.0.18 2023-01-17
bigcan 发表于 2023-6-20 09:05
这应该是java自身的问题,我现在的java是兼容-version与--version两个参数,-version就如楼主一样
你试 ...
对,所以 JDK 8只有 -version
那我们就不能简单粗暴用 --version
而且,我是想知道为什么 -version 会被 以 error形式输出