Partager via


WinExec, fonction (winbase.h)

Exécute l’application spécifiée.

Note Cette fonction est fournie uniquement pour la compatibilité avec Windows 16 bits. Les applications doivent utiliser la fonction CreateProcess .
 

Syntaxe

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

Paramètres

[in] lpCmdLine

Ligne de commande (nom de fichier plus paramètres facultatifs) pour l’application à exécuter. Si le nom du fichier exécutable dans le paramètre lpCmdLine ne contient pas de chemin de répertoire, le système recherche le fichier exécutable dans cet ordre :

  1. Répertoire à partir duquel l’application a été chargée.
  2. Le répertoire actif.
  3. Répertoire système Windows. La fonction GetSystemDirectory récupère le chemin d’accès de ce répertoire.
  4. Répertoire Windows. La fonction GetWindowsDirectory récupère le chemin d’accès de ce répertoire.
  5. Répertoires répertoriés dans la variable d’environnement PATH.

[in] uCmdShow

Options d’affichage. Pour obtenir la liste des valeurs acceptables, consultez la description du paramètre nCmdShow de la fonction ShowWindow .

Valeur retournée

Si la fonction réussit, la valeur de retour est supérieure à 31.

Si la fonction échoue, la valeur de retour est l’une des valeurs d’erreur suivantes.

Code/valeur de retour Description
0
Le système est en panne de mémoire ou de ressources.
ERROR_BAD_FORMAT
Le fichier .exe n’est pas valide.
ERROR_FILE_NOT_FOUND
Le fichier spécifié est introuvable.
ERROR_PATH_NOT_FOUND
Le chemin spécifié est introuvable.

Remarques

La fonction WinExec retourne lorsque le processus démarré appelle la fonction GetMessage ou qu’une limite de délai d’attente est atteinte. Pour éviter d’attendre le délai d’expiration, appelez la fonction GetMessage dès que possible dans tout processus démarré par un appel à WinExec.

Remarques sur la sécurité

Le nom de l’exécutable est traité comme la première chaîne délimitée par des espaces blancs dans lpCmdLine. Si le nom de l’exécutable ou du chemin d’accès contient un espace, il existe un risque qu’un autre exécutable puisse être exécuté en raison de la façon dont la fonction analyse les espaces. L’exemple suivant est dangereux, car la fonction tente d’exécuter « Program.exe », s’il existe, au lieu de « MyApp.exe ».
WinExec("C:\\Program Files\\MyApp", ...)

Si un utilisateur malveillant devait créer une application appelée « Program.exe » sur un système, tout programme qui appelle incorrectement WinExec à l’aide du répertoire Program Files exécutera cette application au lieu de l’application prévue.

Pour éviter ce problème, utilisez CreateProcess plutôt que WinExec. Toutefois, si vous devez utiliser WinExec pour des raisons héritées, assurez-vous que le nom de l’application est placé entre guillemets, comme illustré dans l’exemple ci-dessous.

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winbase.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll
Ensemble d’API ext-ms-win-kernel32-process-l1-1-0 (introduit dans Windows 10, version 10.0.14393)

Voir aussi

CreateProcess