您的位置:首页 > 编程语言 > C#

c#.NET 调用命令控制台 并获取执行结果

2015-06-29 14:15 801 查看



本文阐述了如何在.net中悄悄的执行dos命令,并通过重定向输出来返回结果的方式。

一、怎样使dos命令悄悄执行,而不弹出控制台窗口?

1.需要执行带“/C”参数的“cmd.exe”命令,它表示执行完命令后立即退出控制台。

2.设置startInfo.UseShellExecute = false; //不使用系统外壳程序启动进程

3.设置startInfo.CreateNoWindow = true; //不创建窗口

二、怎样得到dos命令的执行结果?

1.设置startInfo.RedirectStandardOutput = true; //重定向输出,而不是默认的显示在dos控制台

2.使用process.StandardOutput来读取结果。

三、源程序

我将这一系列操作都封装到了类DosCommandOutput的方法Execute中,请看下面:

using System;

using System.Text;

using System.Diagnostics;

namespace Wuya.GetDosCommandOutput

{

/// <summary>

/// DOS命令输出类

/// </summary>

class DosCommandOutput

{

/// <summary>

/// 执行DOS命令,返回DOS命令的输出

/// </summary>

/// <param name="dosCommand">dos命令</param>

/// <returns>返回输出,如果发生异常,返回空字符串</returns>

public static string Execute(string dosCommand)

{

return Execute(dosCommand, 60 * 1000);

}

/// <summary>

/// 执行DOS命令,返回DOS命令的输出

/// </summary>

/// <param name="dosCommand">dos命令</param>

/// <param name="milliseconds">等待命令执行的时间(单位:毫秒),如果设定为0,则无限等待</param>

/// <returns>返回输出,如果发生异常,返回空字符串</returns>

public static string Execute(string dosCommand, int milliseconds)

{

string output = ""; //输出字符串

if (dosCommand != null && dosCommand != "")

{

Process process = new Process(); //创建进程对象

ProcessStartInfo startInfo = new ProcessStartInfo();

startInfo.FileName = "cmd.exe"; //设定需要执行的命令

startInfo.Arguments = "/C " + dosCommand; //设定参数,其中的“/C”表示执行完命令后马上退出

startInfo.UseShellExecute = false; //不使用系统外壳程序启动

startInfo.RedirectStandardInput = false; //不重定向输入

startInfo.RedirectStandardOutput = true; //重定向输出

startInfo.CreateNoWindow = true; //不创建窗口

process.StartInfo = startInfo;

try

{

if (process.Start()) //开始进程

{

if (milliseconds == 0)

process.WaitForExit(); //这里无限等待进程结束

else

process.WaitForExit(milliseconds); //这里等待进程结束,等待时间为指定的毫秒

output = process.StandardOutput.ReadToEnd();//读取进程的输出

}

}

catch

{

}

finally

{

if (process != null)

process.Close();

}

}

return output;

}

}

}

四、使用示例

txtResult.Text=DosCommandOutput.Execute(txtCommand.Text);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: