Поделиться через


Interaction.Shell(String, AppWinStyle, Boolean, Int32) Метод

Определение

Запускает исполняемую программу и возвращает целочисленное значение, содержащее идентификатор процесса программы, если программа в данный момент все еще выполняется.

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

Параметры

PathNamePathname
String

Обязательный. String. Имя программы для выполнения, а также все обязательные аргументы и параметры командной строки. PathName также может включать диск и путь к каталогу или папку.
Если путь к программе неизвестен, для ее поиска можно использовать GetFiles. Например, можно вызвать My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt")метод , который возвращает полный путь к каждому файлу с именем testFile.txt в любом месте диска C:\.

Style
AppWinStyle

Необязательный элемент. AppWinStyle. Значение, выбранное из перечисления AppWinStyle и задающее стиль окна, в котором запускается программа. Если параметр Style опущен, Shell использует стиль AppWinStyle.MinimizedFocus, запуская программу в свернутом состоянии и с установленным фокусом.

Wait
Boolean

Необязательный элемент. Boolean. Значение, показывающее должна ли функция Shell ожидать завершения программы. Если параметр Wait опущен, Shell использует значение False.

Timeout
Int32

Необязательный элемент. Integer. Число миллисекунд ожидания завершения, если значение Wait равно True. Если параметр Timeout опущен, функция Shell использует значение -1, которое означает, что таймаут не используется, и Shell ожидает завершения выполнения программы. Таким образом, если опустить параметр Timeout или установить его равным -1, существует возможность, что функция Shell никогда не возвратит управление в программу.

Возвращаемое значение

Целое число, содержащее идентификатор процесса программы, если она все еще выполняется. 0, если выполнение программы уже завершено.

Исключения

Style вне диапазона от 0 до 9 включительно.

Shell не удается найти файл PathName.

PathName имеет значение Nothing.

Примеры

В следующем примере функция используется Shell для запуска приложения, указанного пользователем. Если указать AppWinStyle.NormalFocus в качестве второго аргумента, приложение открывается в обычном размере и получается фокус.

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.

Комментарии

Возвращаемое значение Shell функции зависит от того, выполняется ли программа с именем в PathName при Shell возврате. Если задано значение WaitTrue и программа завершается до истечения времени ожидания, Shell возвращается ноль. Если истекает время ожидания или если вы опустили Wait или задали для Falseнего значение , Shell возвращает идентификатор процесса программы. Идентификатор процесса — это уникальный номер, который идентифицирует запущенную программу.

Сбой при запуске

Shell Если функции не удается запустить именованную FileNotFoundException программу, возникает ошибка. Это может произойти, например, при попытке запустить 16-разрядную программу, например command.com, из приложения с помощью System.Windows.Forms. Для обходного решения можно запустить 32-разрядную программу, которая вызывает нужную 16-разрядную программу. В случае command.comможно запустить cmd.exe в качестве альтернативы.

Ожидание завершения

По умолчанию Shell функция выполняет программу асинхронно. Это означает, что программа, запущенная с Shell функцией, может не завершить выполнение до выполнения инструкций Shell , следующих за функцией. Если вы хотите дождаться завершения программы, прежде чем продолжить, задайте для значение WaitTrue.

Определение кода выхода

Процесс может возвращать код выхода после завершения. Однако нельзя использовать для Shell получения этого кода выхода, так как Shell возвращает ноль, если он ожидает завершения, а также потому, что процесс выполняется в другом объекте из Shell.

Чтобы получить код выхода из процесса, необходимо написать собственный код, чтобы инициировать процесс и дождаться завершения. В следующем примере показано, как инициировать процесс, дождаться его завершения и получить код выхода.

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))  

Защита спецификации файла

Следует всегда заключать весь путь и спецификацию файла в кавычки, как показано в следующем примере.

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

Каждая пара смежных двойных кавычек (" ") в строковом литерале интерпретируется как один символ двойных кавычек в строке. Таким образом, в предыдущем примере функция представляет следующую Shell строку:

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

Если путь не заключен в кавычки, Windows будет искать файл с именем Program.exe в каталоге C:\, а не display.exe в каталоге C:\Program Files.

Важно!

Если не заключить путь и спецификацию файла в кавычки, существует угроза безопасности, если имя файла или узел пути содержат пробелы. В предыдущем примере узел \Program Files пути содержит пробел. Если спецификация не была в кавычках и программа с именем Program.exe была установлена в C:\, например путем незаконного изменения, Windows выполнила бы ее вместо display.exe.

Важно!

Для Shell функции требуется разрешение неуправляемого кода, что может повлиять на ее выполнение в ситуациях с частичным доверием. Дополнительные сведения см. в разделах SecurityPermission и Разрешения на доступ к коду.

Применяется к

См. также раздел