WinExec 関数 (winbase.h)
指定したアプリケーションを実行します。
構文
UINT WinExec(
[in] LPCSTR lpCmdLine,
[in] UINT uCmdShow
);
パラメーター
[in] lpCmdLine
実行するアプリケーションのコマンド ライン (ファイル名と省略可能なパラメーター)。 lpCmdLine パラメーター内の実行可能ファイルの名前にディレクトリ パスが含まれていない場合、システムは次の順序で実行可能ファイルを検索します。
- アプリケーションの読み込み元のディレクトリ。
- 現在のフォルダー。
- Windows システム ディレクトリ。 GetSystemDirectory 関数は、このディレクトリのパスを取得します。
- Windows ディレクトリ。 GetWindowsDirectory 関数は、このディレクトリのパスを取得します。
- 環境変数 PATH 内に記述されたフォルダー。
[in] uCmdShow
表示オプション。 使用できる値の一覧については、ShowWindow 関数の nCmdShow パラメーターの説明を参照してください。
戻り値
関数が成功した場合、戻り値は 31 より大きくなります。
関数が失敗した場合、戻り値は次のいずれかのエラー値になります。
リターン コード/値 | 説明 |
---|---|
|
システムのメモリまたはリソースが不足しています。 |
|
.exe ファイルが無効です。 |
|
The specified file was not found. (指定されたファイルは見つかりませんでした。) |
|
指定したパスが見つかりませんでした。 |
注釈
WinExec 関数は、開始プロセスが GetMessage 関数を呼び出すか、タイムアウト制限に達したときにを返します。 タイムアウトの遅延を待機しないようにするには、WinExec の呼び出しによって開始されたプロセスで、できるだけ早く GetMessage 関数を呼び出します。
セキュリティに関する備考
実行可能ファイル名は、 lpCmdLine の最初の空白区切り文字列として扱われます。 実行可能ファイルまたはパス名にスペースが含まれている場合、関数がスペースを解析する方法により、別の実行可能ファイルが実行される可能性があります。 次の例は、関数が "MyApp.exe" ではなく"Program.exe" を実行しようとするため、危険です。WinExec("C:\\Program Files\\MyApp", ...)
悪意のあるユーザーが "Program.exe" というアプリケーションをシステムに作成した場合、Program Files ディレクトリを使用して WinExec を 誤って呼び出すプログラムは、目的のアプリケーションではなく、このアプリケーションを実行します。
この問題を回避するには、WinExec ではなく CreateProcess を使用します。 ただし、従来の理由で WinExec を 使用する必要がある場合は、次の例に示すように、アプリケーション名が引用符で囲まれていることを確認してください。
WinExec("\"C:\\Program Files\\MyApp.exe\" -L -S", ...)
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | winbase.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |
API セット | ext-ms-win-kernel32-process-l1-1-0 (Windows 10 バージョン 10.0.14393 で導入) |