2010-08-08 16 views
15

Sé cómo ejecutar una aplicación externa en C# System.Diagnostics.Process.Start(executableName);, pero ¿qué sucede si la aplicación que deseo ejecutar tiene una extensión que Windows no reconoce como extensión de un archivo ejecutable? En mi caso es application.bin.Ejecutar aplicación externa sin extensión .exe

Respuesta

28

clave es establecer la propiedad Process.StartInfo.UseShellExecute a false antes de iniciar el proceso, por ejemplo:

System.Diagnostics.Process p = new System.Diagnostics.Process(); 
p.StartInfo.FileName = @"c:\tmp\test.bin"; 
p.StartInfo.UseShellExecute = false; 
p.Start(); 

Esto iniciará el proceso directamente: en lugar de pasar por el "vamos a tratar de averiguar el ejecutable para el especificada la extensión de archivo "shell logic", el archivo se considerará ejecutable.

Otra sintaxis para conseguir el mismo resultado podría ser:

var processStartInfo = new ProcessStartInfo 
{ 
    FileName = @"c:\tmp\test.bin", 
    UseShellExecute = false 
}; 
Process.Start(processStartInfo); 
+1

buena explicación :-) – Chad

0

Para seguir en la entrada de mdb: esto sólo funciona si usted califica plenamente la ruta de acceso al archivo. Si deja que Windows permita buscar la variable de entorno PATH para el archivo, agregará un ".exe" para cada carpeta que busque.

Lamentablemente, esto es doloroso para el proyecto en el que estoy trabajando, porque la ubicación es completamente dependiente de la RUTA como se establece en un archivo de usuario. Tendré que encontrar el archivo manualmente y establecer la propiedad StartInfo.FileName en una ruta totalmente calificada.

+0

Ah ... Resulta que hay un poco viejo truco DOS puede que para esto: Añadir un solo punto al final del nombre de archivo y Windows buscará el archivo sin una extensión. Establezca StartInfo.FileName = "[appname]". y evitará agregar el ".exe" al final. – Yelnic

2

Y para seguir desde @yelnic. Trate de usar cmd.exe /C myapp, lo encontré bastante útil cuando quiero un poco más de Process.Start().

using (Process process = Process.Start("cmd.exe") 
{ 
    // `cmd` variable can contain your executable without an `exe` extension 
    process.Arguments = String.Format("/C \"{0} {1}\"", cmd, String.Join(" ", args)); 
    process.UseShellExecute = false; 
    process.RedirectStandardOutput = true; 
    process.Start(); 
    process.WaitForExit(); 
    output = process.StandardOutput.ReadToEnd(); 
} 
Cuestiones relacionadas