Fungsi WinExec (winbase.h)
Menjalankan aplikasi yang ditentukan.
Sintaks
UINT WinExec(
[in] LPCSTR lpCmdLine,
[in] UINT uCmdShow
);
Parameter
[in] lpCmdLine
Baris perintah (nama file ditambah parameter opsional) agar aplikasi dijalankan. Jika nama file yang dapat dieksekusi dalam parameter lpCmdLine tidak berisi jalur direktori, sistem mencari file yang dapat dieksekusi dalam urutan ini:
- Direktori tempat aplikasi dimuat.
- Direktori saat ini.
- Direktori sistem Windows. Fungsi GetSystemDirectory mengambil jalur direktori ini.
- Direktori Windows. Fungsi GetWindowsDirectory mengambil jalur direktori ini.
- Direktori yang tercantum dalam variabel lingkungan PATH.
[in] uCmdShow
Opsi tampilan. Untuk daftar nilai yang dapat diterima, lihat deskripsi parameter nCmdShow dari fungsi ShowWindow .
Nilai kembali
Jika fungsi berhasil, nilai yang dikembalikan lebih besar dari 31.
Jika fungsi gagal, nilai yang dikembalikan adalah salah satu nilai kesalahan berikut.
Mengembalikan kode/nilai | Deskripsi |
---|---|
|
Sistem kehabisan memori atau sumber daya. |
|
File .exe tidak valid. |
|
File yang ditentukan tidak ditemukan. |
|
Jalur yang ditentukan tidak ditemukan. |
Keterangan
Fungsi WinExec kembali saat proses dimulai memanggil fungsi GetMessage atau batas waktu habis tercapai. Untuk menghindari penundaan waktu habis, panggil fungsi GetMessage sesegera mungkin dalam proses apa pun yang dimulai oleh panggilan ke WinExec.
Keterangan Keamanan
Nama yang dapat dieksekusi diperlakukan sebagai string pertama yang dibatasi spasi putih di lpCmdLine. Jika nama yang dapat dieksekusi atau jalur memiliki ruang di dalamnya, ada risiko bahwa executable yang berbeda dapat dijalankan karena cara fungsi mengurai spasi. Contoh berikut berbahaya karena fungsi akan mencoba menjalankan "Program.exe", jika ada, alih-alih "MyApp.exe".WinExec("C:\\Program Files\\MyApp", ...)
Jika pengguna jahat membuat aplikasi yang disebut "Program.exe" pada sistem, program apa pun yang salah memanggil WinExec menggunakan direktori Program Files akan menjalankan aplikasi ini alih-alih aplikasi yang dimaksudkan.
Untuk menghindari masalah ini, gunakan CreateProcess daripada WinExec. Namun, jika Anda harus menggunakan WinExec karena alasan warisan, pastikan nama aplikasi diapit dalam tanda kutip seperti yang ditunjukkan pada contoh di bawah ini.
WinExec("\"C:\\Program Files\\MyApp.exe\" -L -S", ...)
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | winbase.h (termasuk Windows.h) |
Pustaka | Kernel32.lib |
DLL | Kernel32.dll |
Set API | ext-ms-win-kernel32-process-l1-1-0 (diperkenalkan dalam Windows 10, versi 10.0.14393) |