¿Lanzar una aplicación (.EXE) desde C #?

Respuestas:

168

System.Diagnostics.Process.Start()Método de uso

Mira este artículo sobre cómo usarlo.

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
fuente
230

Aquí hay un fragmento 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;
}

Hay mucho más que puede hacer con estos objetos, debe leer la documentación: ProcessStartInfo , Process .

sfuqua
fuente
77
Solo quería señalar que esto también parece funcionar con otros tipos de archivos que no sean .exes. Simplemente apunte al archivo que desea abrir y Windows hará todo lo posible para abrirlo: System.Diagnostics.Process.Start (@ "C: \ Users \ Blank \ Desktop \ PdfFile.pdf");
DLeh
WindowStyle = ProcessWindowStyle.Hidden es para no GUI. La primera vez que ejecuté esto falló sin UseShellExecute = false, pero funciona ahora. No estoy seguro de lo que está pasando allí ...
Barton
¿Qué sucede si no sé el nombre completo del exe, quiero llamar a "PathTo * .exe"? ¿Es esto posible? ¿Puedo usar "*" para el resto del nombre?
Vishal
@vishal, este proceso es para llamar a un ejecutable específico. Ciertamente puede intentar usarlo, PathTo*.exepero no esperaría que funcione. (a) ¿Qué pasa si hay múltiples coincidencias? (b) Espero que el código de Microsoft no permita esto, ya que sería una seguridad débil.
sfuqua
58
System.Diagnostics.Process.Start("PathToExe.exe");
Mark S. Rasmussen
fuente
¿Qué sucede si no sé el nombre completo del exe, quiero llamar a "PathTo * .exe"? ¿Es esto posible?
Vishal
@vishal necesita codificar un procedimiento de búsqueda para encontrar el ejecutable
KADEM Mohammed
19
System.Diagnostics.Process.Start( @"C:\Windows\System32\Notepad.exe" );
Adam Kane
fuente
14

Si tiene problemas para usar System.Diagnostics como yo, use el siguiente código simple que funcionará sin él:

Process notePad = new Process();
notePad.StartInfo.FileName   = "notepad.exe";
notePad.StartInfo.Arguments = "mytextfile.txt";
notePad.Start();
NDB
fuente
10
¿Cómo es esto "sin System.Diagonostics"? Processestá en System.Diagnostics.
Paul Sinclair
2

Simplemente coloque su archivo.exe en la carpeta \ bin \ Debug y use:

Process.Start("File.exe");
Amin Mohamed
fuente
3
¿Cómo mejora tu respuesta en todas las anteriores?
mustaccio
La mayoría de las personas que vinieron a ver esta publicación se confundieron acerca de la ruta de un archivo que generalmente ponen en la carpeta de depuración, por lo que cuando usan mi sugerencia "File.exe" entienden directamente que no necesitan una ruta en este caso.
Amin Mohamed
0

Use Process.Start para comenzar un proceso.

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

Prueba esto:

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

(Asegúrese de usar la biblioteca System.Diagnostics)

usuario6436606
fuente