Share via


Interaction.Shell(String, AppWinStyle, Boolean, Int32) Yöntem

Tanım

Yürütülebilir bir program çalıştırır ve hala çalışıyorsa programın işlem kimliğini içeren bir tamsayı döndürür.

public static int Shell (string PathName, Microsoft.VisualBasic.AppWinStyle Style = Microsoft.VisualBasic.AppWinStyle.MinimizedFocus, bool Wait = false, int Timeout = -1);
public static int Shell (string Pathname, Microsoft.VisualBasic.AppWinStyle Style = Microsoft.VisualBasic.AppWinStyle.MinimizedFocus, bool Wait = false, int Timeout = -1);
static member Shell : string * Microsoft.VisualBasic.AppWinStyle * bool * int -> int
static member Shell : string * Microsoft.VisualBasic.AppWinStyle * bool * int -> int
Public Function Shell (PathName As String, Optional Style As AppWinStyle = Microsoft.VisualBasic.AppWinStyle.MinimizedFocus, Optional Wait As Boolean = false, Optional Timeout As Integer = -1) As Integer
Public Function Shell (Pathname As String, Optional Style As AppWinStyle = Microsoft.VisualBasic.AppWinStyle.MinimizedFocus, Optional Wait As Boolean = false, Optional Timeout As Integer = -1) As Integer

Parametreler

PathNamePathname
String

Gereklidir. String. Gerekli bağımsız değişkenler ve komut satırı anahtarlarıyla birlikte yürütülecek programın adı. PathName ayrıca sürücüyü ve dizin yolunu veya klasörünü de içerebilir.
Programın yolunu bilmiyorsanız, bulmak için öğesini GetFiles kullanabilirsiniz. Örneğin, C:\ sürücüsünde herhangi bir yerde adlı testFile.txt her dosyanın tam yolunu döndüren öğesini çağırabilirsinizMy.Computer.FileSystem.GetFiles("C:", True, "testFile.txt").

Style
AppWinStyle

İsteğe bağlı. AppWinStyle. AppWinStyle Programın çalıştırıldığı pencerenin stilini belirten değer. Style Atlanırsa, Shell programı en aza indirgeyen ve odakla başlatan öğesini kullanırAppWinStyle.MinimizedFocus.

Wait
Boolean

İsteğe bağlı. Boolean. İşlevin programın tamamlanmasını beklemesi Shell gerekip gerekmediğini gösteren değer. atlanırsa Wait , Shell kullanır False.

Timeout
Int32

İsteğe bağlı. Integer. ise Wait tamamlanması için beklenen milisaniye sayısı.True Timeout Atlanırsa - Shell 1 kullanır, bu da zaman aşımı olmadığı ve Shell program bitene kadar dönmediği anlamına gelir. Bu nedenle, bunu atlar Timeout veya -1 olarak ayarlarsanız, denetimi programınıza hiçbir zaman döndürmemek mümkündür Shell .

Döndürülenler

Hala çalışıyorsa programın işlem kimliğini içeren bir tamsayı. 0 program zaten yürütmeyi tamamladıysa.

Özel durumlar

Style 0 ile 9 (dahil) arasında değildir.

Shell dosyayı bulamıyor PathName .

PathName, Nothing değeridir.

Örnekler

Aşağıdaki örnek, kullanıcı tarafından belirtilen bir uygulamayı çalıştırmak için işlevini kullanır Shell . İkinci bağımsız değişken olarak belirtilmesi AppWinStyle.NormalFocus , uygulamayı normal boyutta açar ve odak verir.

Dim procID As Integer
' Run calculator.
procID = Shell("C:\Windows\system32\calc.exe", AppWinStyle.NormalFocus)
' The preceding path is for Windows XP.
' The Windows 2000 path is C:\WINNT\system32\calc.exe.

Açıklamalar

İşlevin Shell dönüş değeri, içinde adlı PathName programın döndürdüğünde Shell hala yürütüldüğüne bağlıdır. olarak ayarlarsanız WaitTrue ve program zaman aşımı süresi dolmadan önce biterse sıfır Shell döndürür. Zaman aşımı süresi dolarsa veya değerini atlar Wait veya olarak ayarlarsanızFalseShell, programın işlem kimliğini döndürür. İşlem kimliği, çalışan programı tanımlayan benzersiz bir sayıdır.

Başlatma Hatası

Shell İşlev adlandırılmış programı başlatamazsa bir FileNotFoundException hata oluşur. Bu durum, örneğin kullanarak System.Windows.Formsbir uygulamadan gibi 16 bitlik bir program command.comçalıştırmayı denediğinizde oluşabilir. Geçici bir çözüm için, istenen 16 bit programı çağıran 32 bitlik bir program çalıştırabilirsiniz. durumunda command.comalternatif olarak çalıştırabilirsiniz cmd.exe .

Tamamlanması Bekleniyor

Varsayılan olarak, Shell işlev programı zaman uyumsuz olarak çalıştırır. Bu, işlevle Shell başlatılan bir programın, işlevi izleyen deyimler yürütülmeden önce yürütülmesinin Shell tamamlanmayabileceği anlamına gelir. Devam etmeden önce programın bitmesini beklemek istiyorsanız olarak ayarlayın WaitTrue.

Çıkış Kodunu Belirleme

İşlem sonlandırıldığında çıkış kodu döndürebilir. Ancak, sonlandırmayı beklerse sıfır döndürdüğünden ve ayrıca işlem öğesinden Shellfarklı bir nesnede çalıştığından, bu çıkış kodunu Shell almak için kullanamazsınızShell.

Bir işlemden çıkış kodunu almak için, işlemi başlatmak ve sonlandırmayı beklemek için kendi kodunuzu yazmanız gerekir. Aşağıdaki örnekte bir işlemin nasıl başlatıldığı, sonlandırılıp sonlandırılıp çıkış kodunun alınması beklenmek gösterilmektedir.

Dim procID As Integer  
Dim newProc As Diagnostics.Process  
newProc = Diagnostics.Process.Start("C:\WINDOWS\NOTEPAD.EXE")  
procID = newProc.Id  
newProc.WaitForExit()  
Dim procEC As Integer = -1  
If newProc.HasExited Then  
    procEC = newProc.ExitCode  
End If  
MsgBox("Process with ID " & CStr(ProcID) & _  
    " terminated with exit code " & CStr(procEC))  

Dosya Belirtimini Koruma

Aşağıdaki örnekte gösterildiği gibi her zaman yol ve dosya belirtiminin tamamını tırnak içine almanız gerekir.

ID = Shell("""C:\Program Files\display.exe"" -a -q", , True, 100000)  

Dize değişmez değeri içindeki her çift bitişik çift tırnak işareti (" "), dizede bir çift tırnak karakteri olarak yorumlanır. Bu nedenle, yukarıdaki örnekte işleve aşağıdaki dize gösterilir Shell :

"C:\Program Files\display.exe" -a -q  

Yolu tırnak içine almadıysanız, Windows C:\Program Files dizini yerine display.exe C:\ dizininde adlı Program.exe bir dosya arar.

Önemli

Yolu ve dosya belirtimini tırnak içine almazsanız, dosya adında veya yol düğümünde boşluklar varsa güvenlik riski vardır. Yukarıdaki örnekte, yol düğümü \Program Files bir boşluk içerir. Belirtim tırnak işaretleri içinde değilse ve C:\ dilinde örneğin yasadışı kurcalama yoluyla adlı Program.exe bir program yüklenmişse, Windows bunu yerine display.exeyürütür.

Önemli

İşlev, Shell kısmi güven durumlarında yürütülmesini etkileyebilecek yönetilmeyen kod izni gerektirir. Daha fazla bilgi için bkz SecurityPermission . ve Kod Erişim İzinleri.

Şunlara uygulanır

Ayrıca bkz.