2010-08-08 21 views

cevap

28

Anahtar önce işlemine başlamadan için false için Process.StartInfo.UseShellExecute özelliğini ayarlamaktır, örneğin:

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

Bu doğrudan işlemini başlatmak: Bunun yerine geçiyor "adlı için yürütülebilir anlamaya çalışalım belirtilen dosya uzantısı "kabuk mantığı, dosya yürütülebilir kendisi olarak kabul edilecektir.

Başka sözdizimi

aynı sonucu olabilir ulaşmak için:

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

güzel açıklama – Chad

0

mdb girişine üzerine izleyin: tam dosyanın yolunu nitelemek bu SADECE çalışır. Windows'un dosyanın PATH ortam değişkenini aramasına izin vermek için bırakırsanız, arama yaptığı her klasör için bir ".exe" ekleyecektir.

Ne yazık ki, bu, üzerinde çalıştığım proje için acı veriyor, çünkü konum kullanıcı dosyasında yer alan PATH'a tamamen bağımlı. Dosyayı el ile bulmalı ve StartInfo.FileName özelliğini tam olarak nitelenmiş bir yola ayarlamalıyım.

+0

Ah :-) ... bunu için can biraz eski DOS numara var çıkıyor: dosya adının sonuna bir tek nokta ekleyin ve Windows bir olmadan dosyada arar uzantı. StartInfo.FileName = "[appname]." Öğesini ayarlayın. ve sonunda ".exe" eklenmesini engeller. – Yelnic

2

Ve @yelnic'ten devam etmek için. cmd.exe /C myapp kullanmayı deneyin, Process.Start()'dan biraz daha fazlasını istediğimde oldukça yararlı buldum.

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(); 
} 
İlgili konular