SORU
10 Mart 2011, PERŞEMBE


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
10 Mart 2011, PERŞEMBE


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ı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C#

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caroline Martin

    Caroline Mar

    19 EYLÜL 2008
  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • jkimisyellow

    jkimisyellow

    6 Mayıs 2009