Función WinExec (winbase.h)
Ejecuta la aplicación especificada.
Sintaxis
UINT WinExec(
[in] LPCSTR lpCmdLine,
[in] UINT uCmdShow
);
Parámetros
[in] lpCmdLine
Línea de comandos (nombre de archivo más parámetros opcionales) para que se ejecute la aplicación. Si el nombre del archivo ejecutable en el parámetro lpCmdLine no contiene una ruta de acceso de directorio, el sistema busca el archivo ejecutable en esta secuencia:
- Directorio desde el que se cargó la aplicación.
- El directorio actual.
- Directorio del sistema de Windows. La función GetSystemDirectory recupera la ruta de acceso de este directorio.
- El directorio de Windows. La función GetWindowsDirectory recupera la ruta de acceso de este directorio.
- Los directorios mostrados en la variable de entorno PATH.
[in] uCmdShow
Opciones de visualización. Para obtener una lista de los valores aceptables, vea la descripción del parámetro nCmdShow de la función ShowWindow .
Valor devuelto
Si la función se ejecuta correctamente, el valor devuelto es mayor que 31.
Si se produce un error en la función, el valor devuelto es uno de los siguientes valores de error.
Código o valor devuelto | Descripción |
---|---|
|
El sistema está sin memoria o recursos. |
|
El archivo .exe no es válido. |
|
No se encontró el archivo especificado. |
|
No se encontró la ruta de acceso especificada. |
Comentarios
La función WinExec devuelve cuando el proceso iniciado llama a la función GetMessage o se alcanza un límite de tiempo de espera. Para evitar esperar el retraso de tiempo de espera, llame a la función GetMessage lo antes posible en cualquier proceso iniciado por una llamada a WinExec.
Comentarios de seguridad
El nombre ejecutable se trata como la primera cadena delimitada por espacios en blanco en lpCmdLine. Si el nombre del archivo ejecutable o la ruta de acceso tiene un espacio en él, existe el riesgo de que se pueda ejecutar un archivo ejecutable diferente debido a la forma en que la función analiza los espacios. El ejemplo siguiente es peligroso porque la función intentará ejecutar "Program.exe", si existe, en lugar de "MyApp.exe".WinExec("C:\\Program Files\\MyApp", ...)
Si un usuario malintencionado creara una aplicación denominada "Program.exe" en un sistema, cualquier programa que llame incorrectamente a WinExec mediante el directorio Archivos de programa ejecutará esta aplicación en lugar de la aplicación prevista.
Para evitar este problema, use CreateProcess en lugar de WinExec. Sin embargo, si debe usar WinExec por motivos heredados, asegúrese de que el nombre de la aplicación esté entre comillas como se muestra en el ejemplo siguiente.
WinExec("\"C:\\Program Files\\MyApp.exe\" -L -S", ...)
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | winbase.h (incluya Windows.h) |
Library | Kernel32.lib |
Archivo DLL | Kernel32.dll |
Conjunto de API | ext-ms-win-kernel32-process-l1-1-0 (introducido en Windows 10, versión 10.0.14393) |