Delphi: WinExec, ShellExecute ou CreateProcess?
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é +!




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 ?
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é +.
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,
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?
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+
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.
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
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
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)
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.
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 ???
Blz Delphianos?!!
Entao minha sugestao p/ o Luiz Amavel, aonde esta ‘arquivo.bat’, usar PChar(’arquivo.bat’). Ok
Olá amigos,
Utilizo delphi 2009 para fazer meus programas, recentemente fiz um usando “CreateProcess” que após a formatação do PC ele instalava todos os driver e programas de forma automática, no XP funciona que é uma beleza, porém no vista e no windows 7 eu tenho que ficar confirmando as permissões de administrador. existe uma maneira de executar “CreateProcess” como administrador sem tem que alterar manualmente os comandos no sistema operacional, ou seja o proprio delphi fará isso.
Parabenizo o autor por manter este post até a presente data, pois mesmo ao longo dos 3 anos de existência, este me ajudou muito e é justamente o que buscava a um bom tempo.
Muito grato pela dica.
Abs a todos
Bom dia pessoal… usei o CreateProcess citado acima, e funcionou blz. Só que o sistema fica observando determinada pasta. Quando é criado o arquivo nessa pasta, o sistema starta uma ECF e emite o cupom inteiro. Concluido a emissão, ele devolve o o número do cupom, etc para uma aplicação em LINUX, utilizando o PSCP. Até aí tudo bem. Só que funciona, digamos, por uns três dias, depois dá estouro de memória na DLL da ecf. Será que é por causa do CreateProcess?
ola por favor me ajuda eu to tentando instalar p msn spybox no meu pc mais quando eu vou executar aparece esse arro
não foi possivel executar :
c:/windows/system32/inmbox/wb.exe
create process falhou;codigo 5
acesso negado por favor me ajuda
preciso disso urgente
Eu estou tentando abrir um jogo meu e aparece a seguinte mensagem
CreateProcess falhou; código 5.
Acesso negado.
Ola Marcos, estou usando shellexecute, ele funciona quase redondo, o unico problema é: ele chama um executavel e fecha o programa chamador, o executável chamado tem 2 campos para a antrada de dados, o foco vem no desktop e não na nova tela chamada. O curso fica parada no primeiro campos so que o foco não esta na nova tela, tenho que clicar no campo para dar o foco. Saberia dizer o que fazer?
obrigado