吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1063|回复: 20
收起左侧

[求助] C#中调用CMD执行命令,为什么就是正常输出,并不是错误,反而在StandardOutput获取...

[复制链接]
ilovecomputer66 发表于 2023-6-19 21:32
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就好了 图片1.png

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
wincao + 1 + 1 我很赞同!
蚯蚓翔龙 + 1 我很赞同!

查看全部评分

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形式输出
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表