Iniciando programas arbitrários e capturando sua saída

De dentro do nosso código, podemos criar e iniciar novos processos usando a classe Process no namespace System Diagnostics.

A abordagem mais simples

Esta é forma mais simples de se usar o Process.
No exemplo abaixo é executado o método estático Start para abrir um arquivo com seu aplicativo padrão associado.

using System.Diagnostics;
namespace ExternalProgram
{
    class Program
    {
        static void Main(string[] args)
        {
            Process.Start(@"C:\RepositorioCSharp\README.txt");
        }
    }
}

Sobrecargas

A classe Process tem algumas sobrecargas para o método Start. Para o caso do exemplo acima, foi utilizado a maneira mais simples e direta.

public static Process Start(string fileName, string arguments)
public static Process Start(ProcessStartInfo startInfo);
public static Process Start(string fileName); // => used in the sample above
public static Process Start(string fileName, string arguments, string userName, SecureString password, string domain);
public static Process Start(string fileName, string userName, SecureString password, string domain);

Passando argumentos

Uma das sobrecargas do método estático Start leva o nome do aplicativo e, opcionalmente, qualquer argumento a ser transmitido para a aplicação quando ele é iniciado.

Neste caso, estou definindo o nome do aplicativo como bloco de notas e quando este for iniciado, será passado o parâmetro que contem o caminho do arquivo a ver aberto.

using System.Diagnostics;
namespace ExternalProgram
{
    class Program
    {
        static void Main(string[] args)
        {
            const string appName = "notepad.exe";
            const string fileName = @"C:\RepositorioCSharp\README.txt";
            Process.Start(appName, fileName);
        }
    }
}

Usando ProcessStartInfo

Se queremos controle adicional sobre como nosso processo começa, podemos usar um método alternativo. A sobrecarga do método estático Start que leva um objeto ProcessStartInfo.

O objeto ProcessStartInfo nos permite especificar um número de opções para quando o processo é iniciado. Neste exemplo estou abrindo o “cmd” do windows, executando o comando DATE e capturando esta saida para dentro da aplicação C#.

Por se tratar de exemplo simples, apenas exibo a saida no console.

using System;
using System.Diagnostics;
namespace ExternalProgram
{
    class Program
    {
        static void Main(string[] args)
        {
            var processStarInfo = new ProcessStartInfo
            {
                FileName = "cmd.exe",
                Arguments = "/C DATE /T",
                RedirectStandardOutput = true,
                UseShellExecute = false
            };
            var processStart = Process.Start(processStarInfo);
            var processOutput = processStart.StandardOutput.ReadToEnd();
            Console.WriteLine(processOutput); // => 23/09/2019
        }
    }
}

Podemos usar a classe Process se precisarmos ativar novos processos de dentro do nosso código e opcionalmente podemos ainda a saída desse processo dentro de nossa aplicação.

Qualquer dúvida ou dicas, entre em contato: leandrolt@gmail.com

Leave a Reply

Your email address will not be published. Required fields are marked *