Função WinExec (winbase.h)

Executa o aplicativo especificado.

Nota Essa função é fornecida apenas para compatibilidade com o Windows de 16 bits. Os aplicativos devem usar a função CreateProcess .
 

Sintaxe

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

Parâmetros

[in] lpCmdLine

A linha de comando (nome do arquivo mais parâmetros opcionais) para o aplicativo a ser executado. Se o nome do arquivo executável no parâmetro lpCmdLine não contiver um caminho de diretório, o sistema pesquisará o arquivo executável nesta sequência:

  1. O diretório do qual o aplicativo foi carregado.
  2. O diretório atual.
  3. O diretório do sistema Windows. A função GetSystemDirectory recupera o caminho desse diretório.
  4. O diretório do Windows. A função GetWindowsDirectory recupera o caminho desse diretório.
  5. Os diretórios listados na variável de ambiente PATH.

[in] uCmdShow

As opções de exibição. Para obter uma lista dos valores aceitáveis, consulte a descrição do parâmetro nCmdShow da função ShowWindow .

Retornar valor

Se a função for bem-sucedida, o valor retornado será maior que 31.

Se a função falhar, o valor retornado será um dos valores de erro a seguir.

Valor/código retornado Descrição
0
O sistema está sem memória ou recursos.
ERROR_BAD_FORMAT
O arquivo .exe é inválido.
ERROR_FILE_NOT_FOUND
O arquivo especificado não foi encontrado.
ERROR_PATH_NOT_FOUND
O caminho especificado não foi encontrado.

Comentários

A função WinExec retorna quando o processo iniciado chama a função GetMessage ou um limite de tempo limite é atingido. Para evitar aguardar o atraso de tempo limite, chame a função GetMessage o mais rápido possível em qualquer processo iniciado por uma chamada para WinExec.

Comentários de segurança

O nome executável é tratado como a primeira cadeia de caracteres delimitada por espaço em branco em lpCmdLine. Se o nome do executável ou caminho tiver um espaço, há o risco de que um executável diferente possa ser executado devido à maneira como a função analisa espaços. O exemplo a seguir é perigoso porque a função tentará executar "Program.exe", se existir, em vez de "MyApp.exe".
WinExec("C:\\Program Files\\MyApp", ...)

Se um usuário mal-intencionado criar um aplicativo chamado "Program.exe" em um sistema, qualquer programa que chame o WinExec incorretamente usando o diretório Arquivos de Programas executará esse aplicativo em vez do aplicativo pretendido.

Para evitar esse problema, use CreateProcess em vez de WinExec. No entanto, se você precisar usar WinExec por motivos herdados, verifique se o nome do aplicativo está entre aspas, conforme mostrado no exemplo abaixo.

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

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winbase.h (incluir Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll
Conjunto de APIs ext-ms-win-kernel32-process-l1-1-0 (introduzido no Windows 10, versão 10.0.14393)

Confira também

CreateProcess