Ne zaman Doğru UseShellExecute ayarlamak gerekiyor?
//
// Summary:
// Gets or sets a value indicating whether to use the operating system shell
// to start the process.
//
// Returns:
// true to use the shell when starting the process; otherwise, the process is
// created directly from the executable file. The default is true.
[DefaultValue(true)]
[MonitoringDescription("ProcessUseShellExecute")]
[NotifyParentProperty(true)]
public bool UseShellExecute { get; set; }
Biz yeni bir işlem spawn, ne zaman Gerçek için UseShellExecute ayarlamak gerekiyor?
CEVAP
UseShellExecute
boolean özellik ile ilgili kullanım windows ShellExecute fonksiyon vs CreateProcess fonksiyon - kısa cevap, Eğer UseShellExecute
doğru zaman Process
sınıf kullanır ShellExecute
fonksiyon, aksi halde kullanacak CreateProcess
.
Uzun cevap ShellExecute
fonksiyon kullanılır açık belirtilen bir programı ya da dosya - kabaca equivalnt için yazarak komutu çalıştırılacak içine Çalıştır iletişim ve TAMAM ' ı tıklatarak, yani kullanılabilmesi için (örneğin):
- Açın .html dosyaları veya web tarayıcı ne olduğunu bilmek gerek olmadan varsayılan tarayıcı kullanarak
- Word için yükleme yolu nedir bilmek gerek kalmadan bir word belgesi açın
- Toplu iş dosyaları çalıştırmak
PATH
herhangi bir komut Çalıştır
Örneğin:
Process p = new Process();
p.StartInfo.UseShellExecute = true;
p.StartInfo.FileName = "www.google.co.uk";
p.Start();
Çok kolay kullanım, çok yönlü ve güçlü ancak bazı sakıncaları ile birlikte geliyor:
- Olası çıkış / standart girdi yönlendirmek için değil / hata işler
- Alt işlem için güvenlik tanımlayıcıları (ya da diğer güzel şeyler) belirtmek için muhtemelen değil
Eğer gerçekten çalışacak ne hakkında varsayımlarda eğer güvenlik açıklarını tanıtmak için bir potansiyel var:
// If there is an executable called "notepad.exe" somewhere on the path // then this might not do what we expect p.StartInfo.FileName = "notepad.exe"; p.Start();
CreateProcess
bir süreç - yol aramaz ve alt sürecin standart giriş ya da çıkış yönlendirme sağlar (diğer şeyler arasında) başlayan çok daha hassas bir yoldur. CreateProcess
dezavantajı ancak yukarıda verdiğim 4 örneklerden hiçbiri işe (deneyin ve görün).
Özet olarak, UseShellExecute
eğer yanlış ayarlamanız gerekir:
- / Hata (en sık nedenidir) çıkış / standart girdi yönlendirmek istiyorum
- Çalıştırılabilir (güvenlik nedeniyle) için yol aramak istemiyorum
Diğer taraftan eğer belgeler, URL veya toplu vb dosyaları açmak istiyorsanız... yerine açıkça bir yürütülebilir dosya yolunu vermek zorunda UseShellExecute
doğru tutmalı.
Neden `---Yukarı ayarlamak her zaman y...
Ne zaman diliminin mysql ayarlamak içi...
Kullanım alanı 'datetime' ve...
Ayarı boru Python stdout zaman doğru k...
Nasıl JVM bir zaman dilimini Düzgün ay...