C# command line output

Today I'm coding an application for monitoring the running status of a bat script just like what I did for a exe, but it come out a different result that running bat script would never end.

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");

I have to modify to force it to exit like this when running the bat script:

bat:

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

This part of code could get the exit code from bat script either:

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

And I found something could improve my application (Application could run the script and get the response asynchronously):

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

Below is his code --synchronous:

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();  
}

Asynchronous:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值