ilovecomputer66 发表于 2023-6-19 21:32

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();

fuhohua 发表于 2023-6-19 22:20

使用--version就好了

15751011700 发表于 2023-6-19 22:31

谢谢分享!!!!!!!

咬字分开念 发表于 2023-6-19 22:47

GPT:
在C#中调用CMD执行命令时,可以使用Process类来实现。在使用Process类时,可以通过设置ProcessStartInfo类的RedirectStandardOutput和RedirectStandardError属性来分别获取命令的标准输出和标准错误输出。

如果你在StandardOutput获取到的输出并不是错误信息,那么可能是因为命令本身并没有产生错误,或者错误信息被输出到了标准输出流中。你可以尝试将RedirectStandardError属性设置为true,然后通过StandardError属性获取错误信息。

另外,你也可以在CMD中手动执行命令,观察输出结果,以确定命令是否产生了错误信息。

kkoo 发表于 2023-6-19 22:58

感谢分享

ping970513 发表于 2023-6-20 08:21

感谢大佬

ilovecomputer66 发表于 2023-6-20 08:27

fuhohua 发表于 2023-6-19 22:20
使用--version就好了

请问你上面的是执行 java -help出现的么?

我在JDK 8下,就没有--version
-version      输出产品版本并退出

ilovecomputer66 发表于 2023-6-20 08:28

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.

bigcan 发表于 2023-6-20 09:05

这应该是java自身的问题,我现在的java是兼容-version与--version两个参数,-version就如楼主一样

你试一下别的命令,如:dotnet --version 或 python --version,都是StandardOutput

我的java 是openjdk 11.0.18 2023-01-17


ilovecomputer66 发表于 2023-6-20 09:14

bigcan 发表于 2023-6-20 09:05
这应该是java自身的问题,我现在的java是兼容-version与--version两个参数,-version就如楼主一样

你试 ...

对,所以 JDK 8只有 -version

那我们就不能简单粗暴用 --version

而且,我是想知道为什么 -version 会被 以 error形式输出
页: [1] 2 3
查看完整版本: C#中调用CMD执行命令,为什么就是正常输出,并不是错误,反而在StandardOutput获取...