WinExec, fonction (winbase.h)
Exécute l’application spécifiée.
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 :
- Répertoire à partir duquel l’application a été chargée.
- Le répertoire actif.
- Répertoire système Windows. La fonction GetSystemDirectory récupère le chemin d’accès de ce répertoire.
- Répertoire Windows. La fonction GetWindowsDirectory récupère le chemin d’accès de ce répertoire.
- 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 |
---|---|
|
Le système est en panne de mémoire ou de ressources. |
|
Le fichier .exe n’est pas valide. |
|
Le fichier spécifié est introuvable. |
|
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) |