Share via


winExec 函式 (winbase.h)

執行指定的應用程式。

注意 此函式僅供與16位 Windows 相容。 應用程式應該使用 CreateProcess 函式。
 

語法

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

參數

[in] lpCmdLine

命令行 (檔名加上要執行之應用程式的選擇性參數) 。 如果 lpCmdLine 參數中的可執行檔案名稱不包含目錄路徑,系統就會在此序列中搜尋可執行檔:

  1. 應用程式從中載入的目錄。
  2. 目前的目錄。
  3. Windows system 目錄。 GetSystemDirectory 函式會擷取此目錄的路徑。
  4. Windows 目錄。 GetWindowsDirectory 函式會擷取此目錄的路徑。
  5. PATH 環境變數中列出的目錄。

[in] uCmdShow

顯示選項。 如需可接受的值清單,請參閱 ShowWindow 函式 nCmdShow 參數的描述。

傳回值

如果函式成功,則傳回值大於 31。

如果函式失敗,傳回值就是下列其中一個錯誤值。

傳回碼/值 描述
0
系統記憶體不足或資源。
ERROR_BAD_FORMAT
.exe 檔案無效。
ERROR_FILE_NOT_FOUND
找不到指定的檔案。
ERROR_PATH_NOT_FOUND
找不到指定的路徑。

備註

當啟動的行程呼叫 GetMessage 函式或達到逾時限制時,WinExec 函式會傳回 。 若要避免等候逾時延遲,請在呼叫 WinExec 的任何進程中儘快呼叫 GetMessage 函式。

安全性備註

可執行檔名稱會被視為 lpCmdLine 中的第一個空格符分隔字串。 如果可執行檔或路徑名稱有空格,可能會因為函式剖析空格的方式而執行不同的可執行檔。 下列範例很危險,因為函式會在存在時嘗試執行 「Program.exe」,而不是 「MyApp.exe」。
WinExec("C:\\Program Files\\MyApp", ...)

如果惡意使用者必須在系統上建立名為 「Program.exe」 的應用程式,則使用 Program Files 目錄不正確地呼叫 WinExec 的任何程式都會執行此應用程式,而不是預期的應用程式。

若要避免這個問題,請使用 CreateProcess 而非 WinExec。 不過,如果您基於舊版原因必須使用 WinExec ,請確定應用程式名稱是以引號括住,如下列範例所示。

WinExec("\"C:\\Program Files\\MyApp.exe\" -L -S", ...)

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
目標平台 Windows
標頭 winbase.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll
API 集合 ext-ms-win-kernel32-process-l1-1-0 (Windows 10 10.0.14393 版)

另請參閱

CreateProcess