C#执行DOS命令,返回DOS命令的输出

项目中要定时自动给用户发邮件,于是考虑用一个系统服务来完成这项工作。开发过程中发现,系统服务不方便调试,搜索了下,有一篇帖子《C#服务调试、正式使用两便的模板》提供了一个解决方案,发现其中的执行dos命令的类在其他程序中也很有用,特抽取出来发布在此。
using System.Diagnostics;

/// 
/// DOS命令输出类
/// 
public class CommandDo
{
    /**/
    /// 
    /// 执行DOS命令,返回DOS命令的输出
    /// 
    /// dos命令
    /// 返回输出,如果发生异常,返回空字符串
    public static string Execute(string dosCommand)
    {
        return Execute(dosCommand, 6 * 1000);
    }
    /**/
    /// 
    /// 执行DOS命令,返回DOS命令的输出
    /// 
    /// dos命令
    /// 等待命令执行的时间(单位:毫秒),如果设定为0,则无限等待
    /// 返回输出,如果发生异常,返回空字符串
    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;
    }
}
调用方法见各个方法的注释。
posted @ 2009-07-14 13:38  TGL  阅读(8232)  评论(0编辑  收藏  举报