WinExec 関数 (winbase.h)

指定したアプリケーションを実行します。

メモ この関数は、16 ビット Windows との互換性のためにのみ提供されます。 アプリケーションでは 、CreateProcess 関数を使用する必要があります。
 

構文

UINT WinExec(
  [in] LPCSTR lpCmdLine,
  [in] UINT   uCmdShow
);

パラメーター

[in] lpCmdLine

実行するアプリケーションのコマンド ライン (ファイル名と省略可能なパラメーター)。 lpCmdLine パラメーター内の実行可能ファイルの名前にディレクトリ パスが含まれていない場合、システムは次の順序で実行可能ファイルを検索します。

  1. アプリケーションの読み込み元のディレクトリ。
  2. 現在のフォルダー。
  3. Windows システム ディレクトリ。 GetSystemDirectory 関数は、このディレクトリのパスを取得します。
  4. Windows ディレクトリ。 GetWindowsDirectory 関数は、このディレクトリのパスを取得します。
  5. 環境変数 PATH 内に記述されたフォルダー。

[in] uCmdShow

表示オプション。 使用できる値の一覧については、ShowWindow 関数の nCmdShow パラメーターの説明を参照してください。

戻り値

関数が成功した場合、戻り値は 31 より大きくなります。

関数が失敗した場合、戻り値は次のいずれかのエラー値になります。

リターン コード/値 説明
0
システムのメモリまたはリソースが不足しています。
ERROR_BAD_FORMAT
.exe ファイルが無効です。
ERROR_FILE_NOT_FOUND
The specified file was not found. (指定されたファイルは見つかりませんでした。)
ERROR_PATH_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 で導入)

こちらもご覧ください

CreateProcess