Como inicio um processo em C #?

155

Como inicio um processo, como iniciar uma URL quando o usuário clica em um botão?

Peter Mortensen
fonte

Respostas:

220

Conforme sugerido por Matt Hamilton, a abordagem rápida em que você tem controle limitado sobre o processo é usar o método Start estático na classe System.Diagnostics.Process ...

using System.Diagnostics;
...
Process.Start("process.exe");

A alternativa é usar uma instância da classe Process. Isso permite muito mais controle sobre o processo, incluindo agendamento, o tipo de janela em que ele será executado e, mais útil para mim, a capacidade de aguardar a conclusão do processo.

using System.Diagnostics;
...
Process process = new Process();
// Configure the process using the StartInfo properties.
process.StartInfo.FileName = "process.exe";
process.StartInfo.Arguments = "-n";
process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
process.Start();
process.WaitForExit();// Waits here for the process to exit.

Este método permite muito mais controle do que eu mencionei.

Andy McCluggage
fonte
Eu usei esse método para abrir o arquivo .msg usando o Outlook, mas quando tento abrir outro arquivo .msg, ele abriu outra perspectiva. existe alguma maneira de reutilizar o processo atual e evitar abrir outra perspectiva? stackoverflow.com/questions/28534358/…
user1166085
4
Você deve usar uma instrução using ou alienar o processo, bem stackoverflow.com/questions/16957320/...
Hoppe
25

Você pode usar o método System.Diagnostics.Process.Start para iniciar um processo. Você pode até passar um URL como uma string e ele iniciará o navegador padrão.

Matt Hamilton
fonte
14

Assim como Matt diz, use Process.Start .

Você pode passar um URL ou um documento. Eles serão iniciados pelo aplicativo registrado.

Exemplo:

Process.Start("Test.Txt");

Isso iniciará o Notepad.exe com o Text.Txt carregado.

GvS
fonte
4
O que acontece, se nenhum programa estiver registrado para esse tipo?
LC
2
@LC Win32Exception(0x80004005) "Nenhum aplicativo está associado ao arquivo especificado para esta operação"
Yousha Aleayoub 30/12/19
9

Eu usei o seguinte no meu próprio programa.

Process.Start("http://www.google.com/etc/etc/test.txt")

É um pouco básico, mas faz o trabalho para mim.

Blackvault
fonte
1
Quando usado com um URL como o seu exemplo, isso também tem a vantagem de usar o navegador da web padrão do sistema para abrir o URL.
Lemonseed
se eu usar este é um servidor, ele será aberto no navegador do servidor ou no navegador do cliente?
É uma armadilha
6
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/YourSubDirectory/yourprogram.exe");
Process.Start(new ProcessStartInfo(path));
SimperT
fonte
5

Você pode usar esta sintaxe para executar qualquer aplicativo:

System.Diagnostics.Process.Start("Example.exe");

E o mesmo para um URL. Basta escrever seu URL entre este() .

Exemplo:

System.Diagnostics.Process.Start("http://www.google.com");
alireza amini
fonte
4

Use a classe Process . A documentação do MSDN tem um exemplo de como usá-lo.

Franci Penov
fonte
4
class ProcessStart
{
    static void Main(string[] args)
    {
        Process notePad = new Process();

        notePad.StartInfo.FileName   = "notepad.exe";
        notePad.StartInfo.Arguments = "ProcessStart.cs";

        notePad.Start();
    }
}
Ravi Kumar GN
fonte
3

Declare isso

[DllImport("user32")]
private static extern bool SetForegroundWindow(IntPtr hwnd);
[DllImport("user32")]
private static extern bool ShowWindowAsync(IntPtr hwnd, int a);

E coloque isso dentro da sua função (observe que "checkInstalled" é opcional, mas se você o usar, precisará implementá-lo)

if (ckeckInstalled("example"))
{
    int count = Process.GetProcessesByName("example").Count();
    if (count < 1)
        Process.Start("example.exe");
    else
    {
        var proc = Process.GetProcessesByName("example").FirstOrDefault();
        if (proc != null && proc.MainWindowHandle != IntPtr.Zero)
        {
            SetForegroundWindow(proc.MainWindowHandle);
            ShowWindowAsync(proc.MainWindowHandle, 3);
        }
    }
}

NOTA: Não tenho certeza se isso funciona quando mais de uma instância do .exe está em execução.

Carla Jesus
fonte
2

Inclua o using System.Diagnostics;.

E então chame isso Process.Start("Paste your URL string here!");

Tente algo como isto:

using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;

namespace btnproce
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            string t ="Balotelli";
            Process.Start("http://google.com/search?q=" + t);
        }
    }
}

Observe que é uma página de amostra do ASP.NET como exemplo. Você deve tentar improvisar um pouco.

AVIK DUTTA
fonte
2

Para iniciar o Microsoft Word, por exemplo, use este código:

private void button1_Click(object sender, EventArgs e)
{
    string ProgramName = "winword.exe";
    Process.Start(ProgramName);
}

Para mais explicações, confira este link .

user4340666
fonte
0

Se estiver usando no Windows

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.Start();

Funciona para o .Net Framework, mas para o Net core 3.1, também é necessário definir o UseShellExecute como true

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.StartInfo.UseShellExecute = true;
process.Start();
Moon Waxing
fonte