winExec 函式 (winbase.h)
執行指定的應用程式。
注意 此函式僅供與16位 Windows 相容。 應用程式應該使用 CreateProcess 函式。
語法
UINT WinExec(
[in] LPCSTR lpCmdLine,
[in] UINT uCmdShow
);
參數
[in] lpCmdLine
命令行 (檔名加上要執行之應用程式的選擇性參數) 。 如果 lpCmdLine 參數中的可執行檔案名稱不包含目錄路徑,系統就會在此序列中搜尋可執行檔:
- 應用程式從中載入的目錄。
- 目前的目錄。
- Windows system 目錄。 GetSystemDirectory 函式會擷取此目錄的路徑。
- Windows 目錄。 GetWindowsDirectory 函式會擷取此目錄的路徑。
- PATH 環境變數中列出的目錄。
[in] uCmdShow
顯示選項。 如需可接受的值清單,請參閱 ShowWindow 函式 nCmdShow 參數的描述。
傳回值
如果函式成功,則傳回值大於 31。
如果函式失敗,傳回值就是下列其中一個錯誤值。
傳回碼/值 | 描述 |
---|---|
|
系統記憶體不足或資源。 |
|
.exe 檔案無效。 |
|
找不到指定的檔案。 |
|
找不到指定的路徑。 |
備註
當啟動的行程呼叫 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 版) |