다음을 통해 공유


Shell 함수

업데이트: 2007년 11월

실행 프로그램을 실행하고 실행 중인 프로그램의 프로세스 ID가 포함된 정수를 반환합니다.

Public Function Shell( _
ByVal PathName As String, _ 
Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus, _ 
Optional ByVal Wait As Boolean = False, _ 
Optional ByVal Timeout As Integer = -1 _
) As Integer

매개 변수

  • PathName
    필수적 요소. String. 필수적 요소인 모든 인수 및 명령줄 스위치와 함께 실행할 프로그램의 이름이 포함되어 있습니다. PathName에는 드라이브와 디렉터리 경로 또는 폴더가 포함될 수도 있습니다.

    프로그램의 경로를 모를 경우 My.Computer.FileSystem.GetFiles 메서드를 사용하여 찾을 수 있습니다. 예를 들어, My.Computer.FileSystem.GetFiles("C:\", True, "testFile.txt")를 호출하면 드라이브 C:\의 임의의 위치에 있는 testFile.txt라는 모든 파일의 전체 경로가 반환됩니다.

  • Style
    선택적 요소. AppWinStyle. 프로그램이 실행될 창의 스타일을 지정하는 AppWinStyle 열거형에서 선택된 값입니다. Style이 생략되면 Shell은 최소화되고 포커스가 있는 상태로 프로그램을 시작하는 AppWinStyle.MinimizedFocus를 사용합니다.

  • Wait
    선택적 요소. Boolean. 프로그램이 완료될 때까지 Shell 함수가 대기할지 여부를 나타내는 값입니다. Wait가 생략되면 Shell은 False를 사용합니다.

  • Timeout
    선택적 요소. Integer. Wait가 True인 경우 완료될 때까지 대기하는 시간(밀리초)입니다. Timeout이 생략되면 Shell은 -1을 사용합니다. 이 값은 시간 제한이 없고 프로그램이 완료될 때까지 Shell이 반환되지 않음을 나타냅니다. 따라서 Timeout을 생략하거나 -1로 설정하면 Shell에서 프로그램에 제어를 반환하지 않게 됩니다.

예외

예외 형식

오류 번호

조건

ArgumentException

5

Style의 범위는 0-9(포함)가 아니어야 합니다.

FileNotFoundException

53

Shell이 PathName 파일을 찾을 수 없습니다.

NullReferenceException

91

PathName이 Nothing입니다.

비구조적 오류 처리를 사용하는 Visual Basic 6.0 응용 프로그램을 업그레이드하는 경우에는 "오류 번호" 열을 참조하십시오. 오류 번호를 Number 속성(Err 개체)과 비교할 수 있습니다. 그러나 가능하면 이러한 오류 제어 방법을 Visual Basic의 구조적 예외 처리 개요에 설명된 방식으로 바꾸는 것이 좋습니다.

설명

Shell 함수의 반환 값은 Shell의 반환 시 PathName에 지정된 프로그램이 계속 실행되고 있는지 여부에 따라 달라집니다. Wait를 True로 설정하고 제한 시간이 만료되기 전에 프로그램이 종료되면 Shell은 0을 반환합니다. 제한 시간이 만료되거나 Wait를 생략하거나 False로 설정한 경우 Shell은 프로그램의 프로세스 ID를 반환합니다. 프로세스 ID는 실행하고 있는 프로그램을 식별하는 고유한 숫자입니다.

시작 실패

Shell 함수가 명명된 프로그램을 시작할 수 없으면 FileNotFoundException 오류가 발생합니다. 이러한 상황은 예를 들어, System.Windows.Forms를 사용하여 응용 프로그램에서 command.com과 같은 16비트 프로그램을 실행하려는 경우에 발생할 수 있습니다. 이 문제를 해결하려면 원하는 16비트 프로그램을 호출하는 32비트 프로그램을 실행할 수 있습니다. 또한 command.com 대신 cmd.exe를 실행할 수도 있습니다.

완료 대기 중

기본적으로 Shell 함수는 프로그램을 비동기적으로 실행합니다. 따라서 Shell 함수를 사용하여 시작하는 프로그램은 Shell 함수 다음에 오는 문이 실행되기 전까지 종료되지 않습니다. 계속하지 않고 프로그램이 종료될 때까지 대기하려면 Wait를 True로 설정하십시오.

종료 코드 확인

프로세스는 종료 시에 종료 코드를 반환할 수 있습니다. 그러나 Shell이 종료를 기다리면서 0을 반환하고 또한 프로세스가 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에서는 C:\Program Files 디렉터리에 있는 display.exe 파일을 찾는 대신 C:\ 디렉터리에서 Program.exe 파일을 찾습니다.

보안 정보:

경로 및 파일 사양을 따옴표로 묶지 않을 경우 파일 이름 또는 경로 노드에 공백이 들어 있으면 보안상 위험할 수 있습니다. 앞의 예제에서 경로 노드 \Program Files에는 공백이 들어 있습니다. 이 사양이 따옴표로 묶여 있지 않고 Program.exe라는 프로그램이 C:\에 설치되어 있으면 데이터 훼손 등으로 인해 Windows에서 display.exe 대신 이 프로그램을 실행할 수 있습니다.

보안 정보:

Shell 함수를 사용하려면 비관리 코드 권한이 있어야 합니다. 이 권한은 부분 신뢰 상태에서 해당 함수의 실행을 제한할 수 있습니다. 자세한 내용은 SecurityPermission코드 액세스 권한을 참조하십시오.

예제

다음 예제에서는 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.

스마트 장치 개발자 참고 사항

이 함수는 지원되지 않습니다.

요구 사항

네임스페이스: Microsoft.VisualBasic

**모듈:**Interaction

**어셈블리:**Visual Basic 런타임 라이브러리(Microsoft.VisualBasic.dll)

참고 항목

참조

AppWinStyle 열거형

ArgumentException

FileNotFoundException

NullReferenceException

My.Computer.FileSystem.GetFiles 메서드

AppActivate 함수