Iniciando um aplicativo (.EXE) de C #?

164

Como iniciar um aplicativo usando C #?

Requisitos: deve funcionar no Windows XP e Windows Vista .

Eu vi um exemplo do sampler DinnerNow.net que funciona apenas no Windows Vista.

rudigrobler
fonte

Respostas:

168

Use o System.Diagnostics.Process.Start()método

Confira este artigo sobre como usá-lo.

Process.Start("notepad", "readme.txt");

string winpath = Environment.GetEnvironmentVariable("windir");
string path = System.IO.Path.GetDirectoryName(
              System.Windows.Forms.Application.ExecutablePath);

Process.Start(winpath + @"\Microsoft.NET\Framework\v1.0.3705\Installutil.exe",
path + "\\MyService.exe");
Igal Tabachnik
fonte
230

Aqui está um trecho de código útil:

using System.Diagnostics;

// Prepare the process to run
ProcessStartInfo start = new ProcessStartInfo();
// Enter in the command line arguments, everything you would enter after the executable name itself
start.Arguments = arguments; 
// Enter the executable to run, including the complete path
start.FileName = ExeName;
// Do you want to show a console window?
start.WindowStyle = ProcessWindowStyle.Hidden;
start.CreateNoWindow = true;
int exitCode;


// Run the external process & wait for it to finish
using (Process proc = Process.Start(start))
{
     proc.WaitForExit();

     // Retrieve the app's exit code
     exitCode = proc.ExitCode;
}

Há muito mais que você pode fazer com esses objetos. Leia a documentação: ProcessStartInfo , Process .

sfuqua
fonte
7
Só queria ressaltar que isso também parece funcionar com outros tipos de arquivos que não sejam .exes. Basta apontar para o arquivo que você deseja abrir e o Windows fará o possível para abri-lo: System.Diagnostics.Process.Start (@ "C: \ Usuários \ Espaço em Branco \ Desktop \ PdfFile.pdf");
precisa saber é o seguinte
WindowStyle = ProcessWindowStyle.Hidden é para não GUI. A primeira vez que executei isso, falhou sem UseShellExecute = false, mas funciona agora. Não sei o que está acontecendo lá ...
Barton
E se eu não souber o nome completo do exe, quero chamar "PathTo * .exe" Isso é possível? Posso usar "*" para o resto do nome?
21418 vishal
@vishal, esse processo é para chamar um executável específico. Você certamente pode tentar usar, PathTo*.exemas eu não esperava que funcionasse. (a) e se houver várias correspondências? (b) Espero que o código da Microsoft não permita isso, pois seria uma segurança fraca.
sfuqua
58
System.Diagnostics.Process.Start("PathToExe.exe");
Mark S. Rasmussen
fonte
E se eu não souber o nome completo do exe, quero chamar "PathTo * .exe" Isso é possível?
21418 vishal
@vishal você precisa código de um procedimento de busca para encontrar o executável
Kadem Mohammed
19
System.Diagnostics.Process.Start( @"C:\Windows\System32\Notepad.exe" );
Adam Kane
fonte
14

Se você tiver problemas ao usar o System.Diagnostics como eu, use o seguinte código simples que funcionará sem ele:

Process notePad = new Process();
notePad.StartInfo.FileName   = "notepad.exe";
notePad.StartInfo.Arguments = "mytextfile.txt";
notePad.Start();
NDB
fonte
10
Como é isso "sem System.Diagonostics"? Processestá no System.Diagnostics.
Paul Sinclair
2

Basta colocar seu arquivo.exe na pasta \ bin \ Debug e usar:

Process.Start("File.exe");
Amin Mohamed
fonte
3
Como sua resposta melhora em todas as anteriores?
mustaccio
A maioria das pessoas que vieram para ver esta postagem ficou confusa sobre o caminho de um arquivo, que geralmente elas colocam na pasta de depuração; portanto, quando usam minha dica "File.exe", entendem diretamente que não é necessário um caminho nesse caso.
Amin Mohamed
0

Use Process.Start para iniciar um processo.

using System.Diagnostics;
class Program
{
    static void Main()
    {
    //
    // your code
    //
    Process.Start("C:\\process.exe");
    }
} 
Impasse
fonte
0

Tente o seguinte:

Process.Start("Location Of File.exe");

(Certifique-se de usar a biblioteca System.Diagnostics)

user6436606
fonte