码迷,mamicode.com
首页 > 其他好文 > 详细

C#命令行输出

时间:2014-08-25 20:58:54      阅读:354      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   ar   art   

今天我在编写一个监控bat运行状态的程序,这程序本来跟我以前编写的一个监控exe运行状态的程序大同小异,不过却得出不同的结果(bat的运行不会停下来):

exe:

            p.StandardInput.WriteLine(@"cd\");
            p.StandardInput.WriteLine(@"C:");
            p.StandardInput.WriteLine(@"cd C:\Program Files (x86)");
            p.StandardInput.WriteLine(@"dosomethings.exe --arguments");
            p.StandardInput.WriteLine("exit");


这下我不得不修改这段代码强制让bat结束:

bat:

            p.StandardInput.WriteLine(@"cd\");
            p.StandardInput.WriteLine(@"C:");
            p.StandardInput.WriteLine(@"cd C:\Program Files (x86)");
            p.StandardInput.WriteLine(@"dosomethins.bat --arguments & exit");

这段代码也是可以用bat里面获取到exit code的:

            strOutput = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            iExitCode = p.ExitCode;
            p.Close();


我还在网上发现了一段可以改进我的程序的方法(程序可以异步地跑bat脚本和获取command line输出结果):

http://www.cnblogs.com/ymind/archive/2012/03/23/2415038.html

以下是他的代码--同步:

using (Process process = new System.Diagnostics.Process())  
{  
    process.StartInfo.FileName = "ping";  
    process.StartInfo.Arguments = "www.ymind.net";  
    // 必须禁用操作系统外壳程序  
    process.StartInfo.UseShellExecute = false;  
    process.StartInfo.CreateNoWindow = true;  
    process.StartInfo.RedirectStandardOutput = true;  
 
    process.Start();  
 
    string output = process.StandardOutput.ReadToEnd();  
 
    if (String.IsNullOrEmpty(output) == false)  
        this.textBox1.AppendText(output + "\r\n");  
 
    process.WaitForExit();  
    process.Close();  
}

异步:

private void button3_Click(object sender, EventArgs e)  
{  
    using (Process process = new System.Diagnostics.Process())  
    {  
        process.StartInfo.FileName = "ping";  
        process.StartInfo.Arguments = "www.ymind.net -t";  
        // 必须禁用操作系统外壳程序  
        process.StartInfo.UseShellExecute = false;  
        process.StartInfo.CreateNoWindow = true;  
        process.StartInfo.RedirectStandardOutput = true;  
 
        process.Start();  
 
        // 异步获取命令行内容  
        process.BeginOutputReadLine();  
 
        // 为异步获取订阅事件  
        process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);  
    }  
}  
 
private void process_OutputDataReceived(object sender, DataReceivedEventArgs e)  
{  
    // 这里仅做输出的示例,实际上您可以根据情况取消获取命令行的内容  
// 参考:process.CancelOutputRead()  
 
    if (String.IsNullOrEmpty(e.Data) == false)  
        this.AppendText(e.Data + "\r\n");  
}  
 
#region 解决多线程下控件访问的问题  
 
public delegate void AppendTextCallback(string text);  
 
public void AppendText(string text)  
{  
    if (this.textBox1.InvokeRequired)  
    {  
        AppendTextCallback d = new AppendTextCallback(AppendText);  
        this.textBox1.Invoke(d, text);  
    }  
    else 
    {  
        this.textBox1.AppendText(text);  
    }  
}  
 
#endregion

 

C#命令行输出

标签:style   blog   http   color   os   io   for   ar   art   

原文地址:http://www.cnblogs.com/Aegis-Liang/p/3935702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!