请教C#高手,关于如何用代码调用命令行(cmd),得到其输出?

比如,手动在装了java的Win7命令行输入java-version,会得到如下输出我写的代码如下,但却要不就报错要不就什么也不输出。请问哪里错了?... 比如,手动在装了java的Win7命令行输入java -version,会得到如下输出

我写的代码如下,但却要不就报错要不就什么也不输出。

请问哪里错了?
展开
 我来答
yinfengnong
2015-02-09 · TA获得超过5619个赞
知道大有可为答主
回答量:2344
采纳率:89%
帮助的人:2299万
展开全部

其实可以直接用java.exe 命令,不用cmd.exe ,如下代码:

using System;
using System.ComponentModel;
using System.Diagnostics;

namespace ProcessDemo
{
class Program
{
static void Main(string[] args)
{
try {
Process p = new Process();

p.StartInfo.FileName = "java.exe";
p.StartInfo.Arguments = "-version";
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;

p.Start();
p.WaitForExit();

String result = p.StandardOutput.ReadToEnd();
if (String.IsNullOrEmpty(result)) {
Console.WriteLine("StandardOutput是空的。");
}

result = p.StandardError.ReadToEnd();

Console.WriteLine(result);

} catch(Win32Exception e){
Console.WriteLine(e.Message);
}

Console.WriteLine("Program end");
Console.ReadKey();
}
}
}

 运行结果:

哲事姓无
2015-02-09 · TA获得超过1176个赞
知道小有建树答主
回答量:903
采纳率:100%
帮助的人:444万
展开全部
 // 用 cmd.exe 需要重定向输入,下面使用了两种不种的方法获取 java 版本信息 
 [STAThread]
   public static void Main(string[] args)
   {
       var version1 = GetJavaVersion1();
       Console.WriteLine(version1);
 
       Console.WriteLine();
 
       var version2 = GetJavaVersion12();
       Console.WriteLine(version2);
 
       Console.WriteLine();
       Console.ReadKey();
   }
 
   private static string GetJavaVersion1()
   {
       var process = new Process();
       process.StartInfo.FileName = @"C:\Program Files\Java\jre7\bin\java.exe";
       process.StartInfo.Arguments = "-version";
       process.StartInfo.RedirectStandardError = true;
       process.StartInfo.RedirectStandardOutput = true;
       process.StartInfo.UseShellExecute = false;
 
       process.Start();
 
       process.WaitForExit();
 
       var output = process.StandardOutput.ReadToEnd(); // 这里输出是 ""
       output = process.StandardError.ReadToEnd(); // 我测试是输出到 Error 中的, 不知道是为什么*/
 
       return output;
   }
 
   private static string GetJavaVersion12()
   {
       var process = new Process();
       process.StartInfo.FileName = "cmd.exe";
       process.StartInfo.RedirectStandardInput = true;
       process.StartInfo.RedirectStandardError = true;
       process.StartInfo.RedirectStandardOutput = true;
       process.StartInfo.UseShellExecute = false;
 
       process.Start();
 
       var standardInput = process.StandardInput;
 
       standardInput.WriteLine(@"""C:\Program Files\Java\jre7\bin\java.exe"" -version");
 
       standardInput.Close();
 
       var output = process.StandardOutput.ReadToEnd(); // 这里是输出 cmd 说明
       output = process.StandardError.ReadToEnd(); // 我测试是输出到 Error 中的, 不知道是为什么*/
 
       return output;
   }
更多追问追答
追问
谢了,你的两个函数只是为了说明你的思考调试过程吧,第二个与采纳的答案类似。不过还有高手告诉我可以用 cmd /c java -version这样的命令。
追答

 /c 表示命令执行完成后结束 cmd 进度。你可以在控制台中使用 cmd /? 查看说明。可以使用如下方式调用

[STAThread]
    public static void Main(string[] args)
    {
        var process = new Process();
        process.StartInfo.FileName = "cmd.exe";
        process.StartInfo.Arguments = @"/c ""C:\Program Files\Java\jre7\bin\java.exe"" -version";
        process.StartInfo.RedirectStandardInput = true;
        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.UseShellExecute = false;
 
        process.Start();
        process.WaitForExit();
 
        var output = process.StandardError.ReadToEnd();
 
        Console.WriteLine(output);
        Console.ReadKey();
 
    }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
隔壁的小说
2015-02-09 · TA获得超过666个赞
知道小有建树答主
回答量:219
采纳率:100%
帮助的人:116万
展开全部
static void Main(string[] args)
        {
            Process p = new Process(); 
            p.StartInfo.FileName = "cmd.exe"; 
            p.StartInfo.UseShellExecute = false; 
            p.StartInfo.RedirectStandardInput = true; 
            p.StartInfo.RedirectStandardOutput = true; 
            p.StartInfo.CreateNoWindow = true; 
            p.Start(); 
            p.StandardInput.WriteLine("ipconfig"); 
            p.StandardInput.WriteLine("exit"); 
            p.WaitForExit();
            Console.WriteLine(p.StandardOutput.ReadToEnd()); 
            p.Close();
            Console.ReadKey();
        }

 不知道是不是你要的!

更多追问追答
追问
你这个我运行倒是出来了,但我测试了java -version这个命令,还是什么都没输出。你试试看?
追答

那你把

p.StandardInput.WriteLine("ipconfig");

 改成

p.StandardInput.WriteLine("C:\\Users\\xfh378\\java -version");

 试试!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式