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
Optional.
AppWinStyle. Значение, выбранное из AppWinStyle указания стиля окна, в котором выполняется программа. Если Style опущено, используется AppWinStyle.MinimizedFocus, Shell который запускает программу свернутой и с фокусом.
- Wait
- Boolean
Optional.
Boolean. Значение, указывающее, должна ли Shell функция ожидать завершения программы. Если Wait опущен, Shell используется False.
- Timeout
- Int32
Optional.
Integer. Число миллисекунда, ожидающего завершения, если Wait это True. Если Timeout опущено, Shell использует -1, то есть время ожидания Shell не возвращается, пока программа не завершится. Таким образом, если не Timeout задано значение -1 или задано значение -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.
Important
Если путь и спецификация файла не заключены в кавычки, возникает риск безопасности, если имя файла или узел пути содержит пробелы. В предыдущем примере узел \Program Files пути содержит пробел. Если спецификация не была внутри кавычки, а программа с именем Program.exe была установлена в C:\, например путем незаконного изменения, Windows будет выполнять ее вместо display.exe.
Important
Для Shell функции требуется разрешение неуправляемого кода, которое может повлиять на его выполнение в ситуациях с частичным доверием. Дополнительные сведения см. в разделе SecurityPermission " Разрешения доступа к коду".