Función WinExec (winbase.h)

Ejecuta la aplicación especificada.

Nota Esta función solo se proporciona para la compatibilidad con Windows de 16 bits. Las aplicaciones deben usar la función CreateProcess .
 

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:

  1. Directorio desde el que se cargó la aplicación.
  2. El directorio actual.
  3. Directorio del sistema de Windows. La función GetSystemDirectory recupera la ruta de acceso de este directorio.
  4. El directorio de Windows. La función GetWindowsDirectory recupera la ruta de acceso de este directorio.
  5. 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
0
El sistema está sin memoria o recursos.
ERROR_BAD_FORMAT
El archivo .exe no es válido.
ERROR_FILE_NOT_FOUND
No se encontró el archivo especificado.
ERROR_PATH_NOT_FOUND
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)

Consulte también

CreateProcess