Funzione WinExec (winbase.h)
Esegue l'applicazione specificata.
Sintassi
UINT WinExec(
[in] LPCSTR lpCmdLine,
[in] UINT uCmdShow
);
Parametri
[in] lpCmdLine
Riga di comando (nome file e parametri facoltativi) per l'esecuzione dell'applicazione. Se il nome del file eseguibile nel parametro lpCmdLine non contiene un percorso di directory, il sistema cerca il file eseguibile in questa sequenza:
- Directory da cui è stata caricata l'applicazione.
- La directory corrente.
- Directory del sistema Windows. La funzione GetSystemDirectory recupera il percorso di questa directory.
- La directory Windows. La funzione GetWindowsDirectory recupera il percorso di questa directory.
- Directory elencate nella variabile di ambiente PATH.
[in] uCmdShow
Opzioni di visualizzazione. Per un elenco dei valori accettabili, vedere la descrizione del parametro nCmdShow della funzione ShowWindow .
Valore restituito
Se la funzione ha esito positivo, il valore restituito è maggiore di 31.
Se la funzione ha esito negativo, il valore restituito è uno dei valori di errore seguenti.
Codice/valore restituito | Descrizione |
---|---|
|
Il sistema non è in memoria o risorse. |
|
Il file .exe non è valido. |
|
Il file specificato non è stato trovato. |
|
Il percorso specificato non è stato trovato. |
Commenti
La funzione WinExec restituisce quando il processo avviato chiama la funzione GetMessage o viene raggiunto un limite di timeout. Per evitare l'attesa del ritardo di timeout, chiamare la funzione GetMessage il prima possibile in qualsiasi processo avviato da una chiamata a WinExec.
Osservazioni sulla sicurezza
Il nome eseguibile viene considerato come la prima stringa delimitata dallo spazio vuoto in lpCmdLine. Se il nome dell'eseguibile o del percorso ha uno spazio in esso, esiste un rischio che un eseguibile diverso possa essere eseguito a causa del modo in cui la funzione analizza gli spazi. L'esempio seguente è pericoloso perché la funzione tenterà di eseguire "Program.exe", se esiste, anziché "MyApp.exe".WinExec("C:\\Program Files\\MyApp", ...)
Se un utente malintenzionato doveva creare un'applicazione denominata "Program.exe" in un sistema, qualsiasi programma che chiama in modo errato WinExec usando la directory Programmi eseguirà questa applicazione anziché l'applicazione prevista.
Per evitare questo problema, usare CreateProcess anziché WinExec. Tuttavia, se è necessario usare WinExec per motivi legacy, assicurarsi che il nome dell'applicazione sia racchiuso tra virgolette come illustrato nell'esempio seguente.
WinExec("\"C:\\Program Files\\MyApp.exe\" -L -S", ...)
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows XP [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | winbase.h (include Windows.h) |
Libreria | Kernel32.lib |
DLL | Kernel32.dll |
Set di API | ext-ms-win-kernel32-process-l1-1-0 (introdotto in Windows 10, versione 10.0.14393) |