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 からプログラムに制御が返されなくなる可能性があります。

戻り値

Int32

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

開始に失敗する

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

完了を待っている

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

終了コードの決定

プロセスは終了時に 終了コード を返すことができます。 ただし、終了を待機すると 0 を返し、プロセスが別のオブジェクト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)  

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

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

パスが引用符で囲まれていない場合、Windowsは C:\ で呼び出されたProgram.exeファイルを検索しますディレクトリではなくdisplay.exe、C:\Program Files ディレクトリに格納されます。

重要

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

重要

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

適用対象

こちらもご覧ください