2010-08-08 9 views
15

So come eseguire un'applicazione esterna in C# System.Diagnostics.Process.Start(executableName); ma cosa succede se l'applicazione che voglio eseguire ha un'estensione che non è riconoscibile da Windows come estensione di un eseguibile. Nel mio caso è application.bin.Eseguire un'applicazione esterna senza estensione .exe

risposta

28

chiave è quello di impostare la proprietà Process.StartInfo.UseShellExecute per false prima di iniziare il processo, ad esempio:

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

Questo avvierà il processo direttamente: invece di passare attraverso il "cerchiamo di capire l'eseguibile per il estensione di file specificata "shell logic, il file verrà considerato come eseguibile stesso.

Un'altra sintassi per ottenere lo stesso risultato potrebbe essere:

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

bella spiegazione :-) – Chad

0

Per seguire sulla ingresso di mdb: questo funziona solo se si qualificano pienamente il percorso del file. Se si lascia che Windows cerchi la variabile d'ambiente PATH per il file, aggiungerà un ".exe" per ogni cartella che cerca.

Purtroppo, questo è doloroso per il progetto su cui sto lavorando, perché la posizione dipende interamente dal PERCORSO come impostato in un file utente. Dovrò trovare il file manualmente e impostare la proprietà StartInfo.FileName su un percorso completo.

+0

Ah ... si rivela c'è un po 'vecchio trucco DOS è possibile voi per questo: Aggiungere un singolo periodo fino alla fine del nome del file e Windows cercherà il file senza estensione. Imposta StartInfo.FileName = "[nome app]." ed eviterà di aggiungere ".exe" alla fine. – Yelnic

2

E a seguire da @yelnic. Prova a utilizzare cmd.exe /C myapp, l'ho trovato abbastanza utile quando voglio un po 'di più su 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(); 
} 
Problemi correlati