4

Oct

Come catturare l’output di una applicazione DOS

 

Ciao

 

anche se non è il massimo, a volte ci capita di dover leggere l’outout di una applicazione console (DOS)

un esempio pratico è il seguente:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace ConsoleReaderApplication
{
    class Program
    {
        private static Process p = new Process();
        static void Main(string[] args)
        {
            p.StartInfo.FileName = "ConsoleOutputApplication.exe";
            p.StartInfo.Arguments = "arg1 arg2";
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.UseShellExecute = false;

            p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);
            p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);

            p.Start();
            p.BeginOutputReadLine();
            p.BeginErrorReadLine();

            Console.ReadLine();
            p.Close();
        }

        static void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            Console.WriteLine("Console: {0}", e.Data);
        }

        static void p_ErrorDataReceived(object sender, DataReceivedEventArgs e)
        {
            Console.WriteLine("Error: {0}", e.Data);
        }
    }
}


di fatto la classe Process ci offre la possibilità di leggere con degli eventi sia l’output dell’applicazione che un eventuale output di errore in modo molto semplice

è ovviamente consigliato usare un API se fornita, ma se dobbiamo dialogare con applicazioni molto datate o su altri linguaggi senza possibilità di usare servizi intermedi, allora questo è un approccio da valutare

by Antonio Esposito on 10/4/2011