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 を省略すると、Shell では AppWinStyle.MinimizedFocus が使用されます。この場合、プログラムは最小化し、フォーカスのある状態で起動します。

Wait
Boolean

省略可能。 Boolean. Shell 関数で、プログラムが完了するまで待つかどうかを示す値です。 Wait を省略した場合、Shell では False が使用されます。

Timeout
Int32

省略可能。 Integer. WaitTrue の場合に、プログラムの完了を待つ時間をミリ秒単位で指定する数値です。 Timeout を省略すると、Shell では -1 が使用されます。この場合、タイムアウトは発生せず、Shell はプログラムが終了するまで値を返しません。 したがって、Timeout を省略するか -1 に設定した場合、Shell からプログラムに制御が返されなくなる可能性があります。

戻り値

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

例外

Style が 0 ~ 9 (両端を含む) の範囲内の値ではありません。

ShellPathName ファイルを見つけられません。

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 まだ実行されているかどうかによって異なります。 を にTrue設定Waitし、タイムアウトが切れる前にプログラムが終了すると、 Shell 0 が返されます。 タイムアウトが切れた場合、またはタイムアウトを省略Waitするか にFalseShell設定した場合は、プログラムのプロセス ID が返されます。 プロセス ID は、実行中のプログラムを識別する一意の番号です。

開始に失敗しました

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

完了の待機中

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

終了コードの決定

プロセスは、終了時に 終了コード を返すことができます。 ただし、 を使用 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.exe のファイルを検索します。C:\Program Files ディレクトリではなく display.exe 、 ディレクトリ。

重要

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

重要

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

適用対象

こちらもご覧ください