Nov 28 2006

Delphi: WinExec, ShellExecute ou CreateProcess?

Autor: Marcos Dell Antonio - Categorias: Delphi

Quando preciso executar uma aplicação externa através de um executável, posso escolher entre esses três recursos (comandos): WinExec, ShellExecute ou CreateProcess.

Qual a diferença entre eles? O Fundão responde.

Resumidamente:

  • WinExec: simples, porém não recomendado pela própria Microsoft, pois pode ser que futuramente não estará mais disponível;
  • ShellExecute: utilizado quando existe a necessidade de abrir um arquivo conforme sua extensão. Também pode ser usado para rodar um executável qualquer;
  • CreateProcess: o substituto do WinExec e, certamente, a melhor opção. Possui uma lista gigante de parâmetros, mas muitos deles não são utilizados e podem ser passados como nil ou 0 (zero). Veja um exemplo deste comando aqui.

Para saber mais sobre este e outros comandos, não deixe de conferir as sugestões de livros sobre Delphi que eu elaborei.

É isso aí. Até +!

Adicione ao del.icio.us del.icio.us | Adicione ao Rec6 Rec6

12 comentários para “Delphi: WinExec, ShellExecute ou CreateProcess?”

  1. Marcosem 27 Dec 2006 2:53 pm

    Se eu preciso executar um programa

    cmd := ‘”C:\Program Files\Vantive855\vantiv32.exe” ‘+frmLogin.edUsuario.Text+’ ‘+frmLogin.edSenha.Text;

    onde eu estou passando o programa a ser executado o usuário e a senha do sistema. Caso eu não queira abrir
    o progrma, mas apenas verificar se o usuário e a senha estão corretos, tem como eu retornar true e não abrir o programa ?

  2. Marcos Dell Antonioem 08 Jan 2007 10:08 pm

    Acho que você poderia forçar o retorno do CreateProcess conforme a situação, veja:

    “Se CreateProcess tiver sucesso o valor de retorno é diferente de zero. Se CreateProcess retorna 0, você deve chamar GetLastError para obter um código de erro indicando o que houve de errado.”

    No seu caso, se o login falhou, faça com que o CreateProcess não obtenha sucesso na execução. Se deu certo, faça com que o retorno seja diferente de zero.

    Até +.

  3. Flavioem 30 May 2007 7:22 pm

    Duvida

    Gostei da dica, mais voce sabe como posso fazer ao contrario, caso eu tenha uma aplicacao feita em C#(Windows Application) e deseje carregar meu programa em delphi mais sem a necessidade de novamente passar o login para aplicacao, voce me indica alguma rotina para que a aplicacao delphi reconheca que ela foi startada com parametros e nao necessite usar a tela de login.

    EX : cmd pagamento.exe adm adm 1

    como essa rotina ira fica interna no programa ninguem sabera dessa senha administrativa. e caso a aplicacao seja startada com somente pagamento.exe ela ira rodar normalmente solicitando a tela de login.

    Obrigado,

  4. Ademirem 13 Jun 2007 9:37 am

    Bom dia!

    Instalei no meu micro o active tracker, um programa, mas quando termina de instalar aparece o erro “createprocess falhou código 2″.

    Você pode me ajudar a solucionar esse problema?

  5. Marcos Dell Antonioem 13 Jun 2007 12:07 pm

    Ademir,

    Tem certeza que esta mensagem está no mesmo contexto do post? O CreateProcess que apresentei é um comando/função do Windows.

    Se, e somente se, estivermos falando da mesma coisa, talvez a informação abaixo possa te ajudar:

    ERROR_FILE_NOT_FOUND 2 The system cannot find the file specified.

    T+

  6. [...] Já comentei há alguns dias que  existem três formas para rodar uma aplicação externa em um programa escrito em Delphi. São elas: ShellExecute, WinExec e CreateProcess. [...]

  7. ROSEem 18 Oct 2007 1:43 pm

    Estou tentando instalar um programa da junta comercial no meu computador, mas da o seguinte erro… falha no winexec resultado 740, alguem pode me orientar o que devo fazer.

  8. Abinalioem 27 Oct 2007 8:01 am

    Olá, Colegas

    Preciso, através do Delphi 7, mostrar 5 imagens através do visualizador de imagens do windows, é possivel?
    Tentei usar o ShellExecute, mas só consigo mostrar uma imagem e não 5 ou mais passando como parâmetros.
    Ex.: Tenho uma pasta com muitas fotos, sendo que 5 fotos para cada imovel, tenho no BD o relacionamento entre o imóvel e o nome da foto.

    Abinálio

  9. Luiz Amávelem 07 Nov 2007 1:54 pm

    Estou tentanto executar em Delphi 7 tanto o WinExec como o ShellExecute, mas quando os executo é aberta uma nova instância do programa junto com uma janela do DOS, sendo que os o comando para executar na janela do DOS

  10. Luiz Amávelem 07 Nov 2007 1:58 pm

    Estou tentanto executar em Delphi 7 tanto o WinExec como o ShellExecute para executar um arquivo .bat, mas quando tento é aberta uma nova instância do programa junto com uma janela do DOS, sendo que a janela DOS fica travada e não executa o conteúdo do arquivo.

    Ao clicar em um button ele executa um ou outro comando:

    shellexecute (handle, ‘open’, ‘arquivo.bat’, ”, nil, sw_shownormal);

    WinExec(’arquivo.bat’,sw_show)

  11. alexem 18 Mar 2008 4:58 pm

    O win exec Como que é a linha de programação. Tipo …
    Que executar a calculadora como seria ?
    Gostaria de um exmplo de aplicação para executala por outro programa.

  12. alexem 06 Oct 2008 9:45 pm

    tenho que abrir figuras quando clicar na imagem dela dentro do meu programa em delphi e quero que estas figuras abram diretamente no visualisador de imagens do windows
    entendeu mas nao sei nem qual o nome do visualisador de imagens dentro do windows e quero chama lo ja mostrando a imagem em que cliquei
    entendeu ??? saberia me dizer como ???

Faça um comentário