C# System.Diagnostics.Process.Start(executableName);
içinde harici bir uygulama nasıl çalıştırılacağını biliyorum, ancak çalıştırmak istediğim uygulama bir yürütülebilir dosyanın uzantısı olarak Windows tarafından tanınmayan bir uzantıya sahipse. Benim durumumda application.bin
.Hiçbir .exe uzantısı olmadan harici uygulamayı çalıştırın
cevap
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);
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.
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
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();
}
güzel açıklama – Chad