Condividi tramite


Funzione WinExec (winbase.h)

Esegue l'applicazione specificata.

Nota Questa funzione viene fornita solo per la compatibilità con Windows a 16 bit. Le applicazioni devono usare la funzione CreateProcess .
 

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:

  1. Directory da cui è stata caricata l'applicazione.
  2. La directory corrente.
  3. Directory del sistema Windows. La funzione GetSystemDirectory recupera il percorso di questa directory.
  4. La directory Windows. La funzione GetWindowsDirectory recupera il percorso di questa directory.
  5. 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
0
Il sistema non è in memoria o risorse.
ERROR_BAD_FORMAT
Il file .exe non è valido.
ERROR_FILE_NOT_FOUND
Il file specificato non è stato trovato.
ERROR_PATH_NOT_FOUND
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)

Vedi anche

CreateProcess