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
возврате. Если задано значение Wait
True
и программа завершается до истечения времени ожидания, Shell
возвращается ноль. Если истекает время ожидания или если вы опустили Wait
или задали для False
него значение , Shell
возвращает идентификатор процесса программы. Идентификатор процесса — это уникальный номер, который идентифицирует запущенную программу.
Сбой при запуске
Shell
Если функции не удается запустить именованную FileNotFoundException программу, возникает ошибка. Это может произойти, например, при попытке запустить 16-разрядную программу, например command.com
, из приложения с помощью System.Windows.Forms. Для обходного решения можно запустить 32-разрядную программу, которая вызывает нужную 16-разрядную программу. В случае command.com
можно запустить cmd.exe
в качестве альтернативы.
Ожидание завершения
По умолчанию Shell
функция выполняет программу асинхронно. Это означает, что программа, запущенная с Shell
функцией, может не завершить выполнение до выполнения инструкций Shell
, следующих за функцией. Если вы хотите дождаться завершения программы, прежде чем продолжить, задайте для значение Wait
True
.
Определение кода выхода
Процесс может возвращать код выхода после завершения. Однако нельзя использовать для 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 и Разрешения на доступ к коду.