Interaction.Shell(String, AppWinStyle, Boolean, Int32) メソッド

定義

実行可能プログラムを実行し、プログラムのプロセス ID を含む整数を返します (まだ実行中の場合)。

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")を呼び出すと、ドライブ C:\ の任意の場所に testFile.txt という名前のすべてのファイルの完全なパスが返されます。

Style
AppWinStyle

このフィールドは省略可能です。 AppWinStyle。 プログラムを実行するウィンドウのスタイルを指定する AppWinStyle から選択された値。 Styleを省略すると、ShellAppWinStyle.MinimizedFocusを使用し、プログラムを最小化してフォーカスを設定して開始します。

Wait
Boolean

このフィールドは省略可能です。 BooleanShell関数がプログラムの完了を待機する必要があるかどうかを示す値。 Waitを省略すると、ShellFalseを使用します。

Timeout
Int32

このフィールドは省略可能です。 IntegerWaitTrue場合に完了するまで待機するミリ秒数。 Timeoutを省略すると、Shellは -1 を使用します。つまり、タイムアウトがなく、Shellはプログラムが終了するまで戻りません。 そのため、 Timeout を省略するか、-1 に設定すると、 Shell がプログラムに制御を返さない可能性があります。

返品

プログラムがまだ実行されている場合は、プログラムのプロセス ID を含む整数。 プログラムの実行が既に完了している場合は 0。

例外

Style が 0 ~ 9 の範囲内にありません。

Shell PathName ファイルが見つかりません。

PathNameNothingです。

次の例では、 Shell 関数を使用して、ユーザーが指定したアプリケーションを実行します。 2 番目の引数として 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は 0 を返します。 タイムアウトが切れた場合、または Wait を省略するか、 Falseに設定した場合、 Shell はプログラムのプロセス ID を返します。 プロセス ID は、実行中のプログラムを識別する一意の番号です。

開始に失敗しました

Shell関数が名前付きプログラムを開始できない場合は、FileNotFoundException エラーが発生します。 これは、たとえば、command.com などの 16 ビット プログラムを System.Windows.Forms を使用してアプリケーションから実行しようとすると発生する可能性があります。 回避策として、目的の 16 ビット プログラムを呼び出す 32 ビット プログラムを実行できます。 command.comの場合は、代わりにcmd.exeを実行できます。

完了を待機しています

既定では、 Shell 関数はプログラムを非同期的に実行します。 つまり、 Shell 関数で開始されたプログラムは、 Shell 関数の後のステートメントが実行される前に実行が完了しない可能性があります。 続行する前にプログラムが終了するのを待つ場合は、 WaitTrue に設定します。

終了コードの決定

プロセスは、終了時に 終了コード を返すことができます。 ただし、 Shell を使用してこの終了コードを取得することはできません。 Shell は終了を待機すると 0 を返し、プロセスは 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)

文字列リテラル内の隣接する二重引用符 (" ") の各ペアは、文字列内で 1 つの二重引用符として解釈されます。 したがって、前の例では、 Shell 関数に次の文字列が表示されます。

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

パスが引用符で囲まれていない場合、Windowsは C:\Program Files ディレクトリの Program.exe ではなく、C:\ ディレクトリで display.exe という名前のファイルを検索します。

Important

パスとファイルの指定を引用符で囲まない場合、ファイル名またはパス ノードにスペースが含まれている場合、セキュリティ上のリスクがあります。 前の例では、パス ノード \Program Files にはスペースが含まれています。 指定が引用符の内側になく、Program.exe という名前のプログラムが C:\ にインストールされている場合 (不正な改ざんなど)、Windowsは display.exe の代わりに実行されます。

Important

Shell関数にはアンマネージ コードのアクセス許可が必要です。これは、部分信頼の状況での実行に影響する可能性があります。 詳細については、「 SecurityPermission および コード アクセス許可」を参照してください。

適用対象

こちらもご覧ください