| Exibir mensagem anterior :: Exibir próxima mensagem | 
	
	
		| Autor | Mensagem | 
	
		| lelly_lunatica Novato
 
  
 
 Registrado: Quarta-Feira, 21 de Setembro de 2005
 Mensagens: 2
 
 
 | 
			
				|  Enviada: Qua Set 21, 2005 2:28 pm    Assunto: winexec me complica |   |  
				| 
 |  
				| olá !! 
 pois é... eu tava fazendo um programa em delphi (5) e eu não sabia como fazer backup das informações do banco de dados... então pensei em criar um arquivo .bat com os comandos e executá-lo no evento onclick do botão com o comando winexec.
 
 maaaas... quando eu clico no tal botão ele simplesmente sai do programa e não faz nada...
   
 alguém sabe porque???
 
 bom dia de sol pra todos !!!
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| an.der.son Colaborador
 
  
  
 Registrado: Quarta-Feira, 26 de Mai de 2004
 Mensagens: 2275
 Localização: Itaocara - RJ
 
 | 
			
				|  Enviada: Qua Set 21, 2005 2:37 pm    Assunto: winexec me complica |   |  
				| 
 |  
				| Olá... 
 Seja bem vindo ao fórum....
 
 para melhor te ajudar, seria bom q vc colocasse aki seu codigo com problemas, mas vou tentar te ajudar assim mesmo.....
 
 Tente o seguinte codigo:
 //-- executar programa DOS
 WinExec(\"command.com /c programa.exe\",sw_ShowNormal);
 //-- executar um programa windows
 WinExec(\'NotePad.exe\', 0)
 
 
 Abraços
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| lelly_lunatica Novato
 
  
 
 Registrado: Quarta-Feira, 21 de Setembro de 2005
 Mensagens: 2
 
 
 | 
			
				|  Enviada: Qua Set 21, 2005 3:11 pm    Assunto: winexec me complica |   |  
				| 
 |  
				| olha, tentei o que tu falou... mas continua esquisito... não, sério... era pra ele executar e o programa continuar aberto, não era???
   
 d qlqr forma, aí está o código que eu tava usando::
 
 procedure TFrmMenu.BitBtn4Click(Sender: TObject);
 begin
 [b]WinExec(\'c:\\backup.bat\',0);[/b]
 end;
 
 e o código do arquivo .bat é::
 
 [b]c:\\>copy personale.db a:\\ [/b]
 
 sim, tá tudo nos diretórios certos...
   
 heeeii... computadores ainda vão me deixar louca.
   |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| felinto Aprendiz
 
  
 
 Registrado: Sábado, 6 de Agosto de 2005
 Mensagens: 123
 
 
 | 
			
				|  Enviada: Qua Set 21, 2005 11:47 pm    Assunto: winexec me complica |   |  
				| 
 |  
				| O Winexec não executa um arquivo bat. Quam faz isso é o command.com que é o famoso DOS. Assim voce deve chamar o command.com e como parametro o arquivo bat, como o Anderson indicou.
 
 Nunca passei parametros no winexec. Uso o shelExecute. Mais se o Anderson orientou, deve funconar. se não funcionar veja a sintaxe para passar parametros no ShellExecute.
 
 [Editado em 22/9/2005 por felinto]
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| gean_myboy Novato
 
  
 
 Registrado: Quarta-Feira, 21 de Setembro de 2005
 Mensagens: 4
 
 
 | 
			
				|  Enviada: Qui Set 22, 2005 1:15 am    Assunto: winexec me complica |   |  
				| 
 |  
				| WinExec(\'cmd /c programa.bat\',sw_ShowNormal); 
 Fiz no Delphi 7 com Windows Xp SP2 e rodou .. flw
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| emerloko Novato
 
  
 
 Registrado: Quarta-Feira, 12 de Julho de 2006
 Mensagens: 1
 
 
 | 
			
				|  Enviada: Qua Jul 12, 2006 10:29 pm    Assunto: winexec me complica |   |  
				| 
 |  
				| lelly_lunatica... vc quase acertou com seu código
 vc utilizou assim neh:
 procedure TFrmMenu.BitBtn4Click(Sender: TObject);
 begin
 WinExec(\'c:\\backup.bat\',0);
 end; ?????
 è só vc utlizar assim:
 procedure TFrmMenu.BitBtn4Click(Sender: TObject);
 begin
 WinExec(\'c:\\backup.bat\',Sw_ShowNormal);
 end;
 
 Pronto, ele irá executar normalmente
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| Aldebaran Aprendiz
 
  
  
 Registrado: Quarta-Feira, 12 de Outubro de 2005
 Mensagens: 150
 
 
 | 
			
				|  Enviada: Qui Jul 13, 2006 9:29 am    Assunto: winexec me complica |   |  
				| 
 |  
				| Faz o seguinte o Bat tambem vai funcionar mas faz via delphi que é mais prático assim não vai necessitar de outro aplicativo a executar... 
 CopyFile(\'c:\\meubanco.db\',\'c:\\meubanco.bk\',True)
 True = Se houver um arquivo velho ele substitui....
 
 Espero que isso ajude naum sei se foi bem isso mas ta aew...
   _________________
 
   
  |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| gustavocco Administrador
 
  
 
 Registrado: Sexta-Feira, 6 de Fevereiro de 2004
 Mensagens: 4253
 Localização: Chapecó - SC
 
 | 
			
				|  Enviada: Qui Jul 13, 2006 9:45 am    Assunto: winexec me complica |   |  
				| 
 |  
				| Ainda utilizando o seu bat, vc pode utilizar o ShellExecute: 
 Ex.: Declare a biblioteca ShellApi na seção uses da sua unit e coloque o codigo abaixo no evento em q desejar:
 
 ShellExecute (0, Nil, Pchar(\'c:\\caminho\\seuarquivo.bat\'), Nil, Nil, SW_ShowMaximized);
 
 Mas se vc nao fizer nenhum tratamento no seu arquivo bat, como compactação do arquivo acredito que utilizar o [b]CopyFile[/b] seria mais interessante, pois vc nao dependeria de bat algum para copiar o arquivo.
 
 Abraço.
 _________________
 Top System - www.topsystem.com.br
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| @prendiz Novato
 
  
 
 Registrado: Segunda-Feira, 20 de Novembro de 2006
 Mensagens: 1
 
 
 | 
			
				|  Enviada: Seg Nov 27, 2006 2:41 pm    Assunto: winexec me complica |   |  
				| 
 |  
				| BOM, eu fiz assim: 
 WinExec(\'cmd /c E:\\Config\\getinf.bat\',sw_Show);
 
 este getinf era para me traser informações salvas em arquivos.txt
 mas nem deu certo
 
 aqui tah o código do getinf:
 echo off
 cls
 ipconfig /all > INFORMATION\\ipconfig.txt
 cls
 net user > INFORMATION\\netuser.txt
 cls
 net share > INFORMATION\\netshare.txt
 cls
 date /t > INFORMATION\\data.txt
 cls
 tree C:\\ /f /a > INFORMATION\\treeC.txt
 cls
 tree D:\\ /f /a > INFORMATION\\treeD.txt
 cls
 exit
 
 o arquivo roda mas naum executa os comandos
 alguem pode me ajudar
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| Help_Desk Aprendiz
 
  
  
 Registrado: Segunda-Feira, 24 de Outubro de 2005
 Mensagens: 250
 Localização: Porto Alegre / RS
 
 | 
			
				|  Enviada: Seg Nov 27, 2006 5:03 pm    Assunto: winexec me complica |   |  
				| 
 |  
				| Boa Tarde 
 Ola !  Lelly Lunatica eu fasso dessa forma e funciona , segue abaixo
 
 na Seção USES vc tem que declarar  ( ShellApi ) se vc naum declarar naum vai funcionar o seu código.
 
 procedure TFRM_Backup.SpeedButton1Click(Sender: TObject);
 begin
 if MessageDlg(\'Deseja Realmente Iniciar o Backup do Banco de Dados ?\',mtConfirmation,[mbyes,mbno],0)=mryes then
 begin
 ShellExecute(Handle,\'open\',\'C:\\Desenv\\ftproot\\TarefasDiarias\\DB\\BACKUP.BAT\',\'\',nil,SW_SHOWNORMAL);
 end;
 end;
 
 Espero ter ajudado .
 
 _________________
 "A mente que se abre a uma nova idéia jamais
 volta ao seu tamanho original." (Albert Einstein).
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| johnny-walker Moderador
 
  
  
 Registrado: Sábado, 4 de Outubro de 2003
 Mensagens: 10653
 Localização: Contagem/MG - BRAZIL
 
 | 
			
				|  Enviada: Seg Nov 27, 2006 6:26 pm    Assunto: winexec me complica |   |  
				| 
 |  
				| amigo nao sei como vc esta tentando fazer seu backup, mas aqui no site vc encontra exemplos de como fazer isto sem utilizar batchs. Dá uma procurada aqui... que com certeza vc vai achar e o seu backup ficara bem melhor, há um componente chamado TBackup que a maioria dos amigos aqui devem conhecer e e bem facil vc utilizar... te garanto que o seu backup ficará bem mais bonito e organizado... com backup/restauração e tudo mais que tem direito... 
 vc encontrará este componente e exemplo de como utiliza-lo na internet basta vc procurar no google...
 
 
 bye..
 _________________
 P.O.W.E.R  B.Y  D.E.L.P.H.I
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| KupSoft Novato
 
  
 
 Registrado: Quarta-Feira, 21 de Dezembro de 2011
 Mensagens: 2
 
 
 | 
			
				|  Enviada: Qua Dez 21, 2011 10:10 am    Assunto: Solução Prática para Execução de Arquivos pelo Delphi |   |  
				| 
 |  
				| Segue código que cria um Thread para executar sua aplicação. 
 Desta forma sua aplicação não fica travada. E quando a execução do sistema terminar ele executa um Evento, caso você tenha relacionado ele na criação, e consegue pega o retorno.. ta ai.
 
 unit uExecApp;
 
 interface
 
 uses
 Classes, Windows;
 
 type TEndProcess = procedure(Cmd:String;Index:integer) of object;
 
 type
 TExecApp = class(TThread)
 private
 { Private declarations }
 FEndProcess : TEndProcess;
 protected
 procedure Execute; override;
 public
 Cmd:String;
 Index:integer;
 property EndProcess : TEndProcess read FEndProcess write FEndProcess;
 end;
 
 function CreateProcessSimple(cmd: string): boolean;
 
 implementation
 
 { Important: Methods and properties of objects in visual components can only be
 used in a method called using Synchronize, for example,
 
 Synchronize(UpdateCaption);
 
 and UpdateCaption could look like,
 
 procedure TExecApp.UpdateCaption;
 begin
 Form1.Caption := ‘Updated in a thread’;
 end; }
 
 { TExecApp }
 
 procedure TExecApp.Execute;
 begin
 
 { Place thread code here }
 CreateProcessSimple(Cmd);
 
 { Quando concluir o processo executa eventos }
 if Assigned(FEndProcess) then begin
 FEndProcess(Cmd,Index);
 end;
 
 end;
 
 function CreateProcessSimple(cmd: string): boolean;
 var
 SUInfo: TStartupInfo;
 ProcInfo: TProcessInformation;
 begin
 FillChar(SUInfo, SizeOf(SUInfo), #0);
 SUInfo.cb := SizeOf(SUInfo);
 SUInfo.dwFlags := STARTF_USESHOWWINDOW;
 SUInfo.wShowWindow := SW_HIDE;
 
 Result := CreateProcess(nil,
 PChar(cmd),
 nil,
 nil,
 false,
 CREATE_NEW_CONSOLE or
 NORMAL_PRIORITY_CLASS,
 nil,
 nil,
 SUInfo,
 ProcInfo);
 
 if (Result) then
 begin
 WaitForSingleObject(ProcInfo.hProcess, INFINITE);
 
 CloseHandle(ProcInfo.hProcess);
 CloseHandle(ProcInfo.hThread);
 end;
 end;
 
 end.
 
 #####################################################
 Modo de Utilizar o Código
 #####################################################
 (…)
 
 public
 procedure TerminouExecutaAqui(Cmd:String;Index:integer);
 
 end;
 
 (…)
 
 implementation
 
 (…)
 
 procedure TfMain.btExecutarClick(Sender: TObject);
 var
 ExecApp: TExecApp;
 begin
 
 ExecApp := TExecApp.Create(true);
 ExecApp.Cmd := ‘calc.exe’;
 ExecApp.Index := 1;
 ExecApp.OnEndProcess := TerminouExecutaAqui;
 ExecApp.Resume;
 
 end;
 
 procedure TfMain.TerminouExecutaAqui(Cmd: String; Index: integer);
 begin
 if Index = 1 then begin
 ShowMessage(’Você acabou de fechar a calculadora!’);
 end;
 end;
 
 ########################################################
 
 Visite nosso portal http://www.kupsoft.com
 
 Um grande abraço a todos! E boa sorte no seu código.
 _________________
 Mais uma contribuição http://www.kupsoft.com
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| KupSoft Novato
 
  
 
 Registrado: Quarta-Feira, 21 de Dezembro de 2011
 Mensagens: 2
 
 
 | 
			
				|  Enviada: Qua Dez 21, 2011 10:11 am    Assunto: Execução de Multiplos arquivos pelo Delphi |   |  
				| 
 |  
				| Caso você queira executar varias aplicações ao mesmo tempo e precisa pegar o retorno de todas, exemplo um ping em diversos sites, um get em variso hosts. 
 Você pode declarar a variavel ExecApp: TExecApp; em modo publico la em cima e colocar a mesma desta forma.
 
 (…)
 public
 ExecApp: array of TExecApp;
 end;
 (…)
 
 Antes de executar, você precisa trabalhar o array.
 
 (…)
 procedure TfMain.btExecutarClick(Sender: TObject);
 begin
 // Marca o tamanho do array
 SetLength(ExecApp,Length(ExecApp)+1);
 
 // agora acessar o seu array
 ExecApp[Length(ExecApp)-1] := TExecApp.Create(true);
 ExecApp[Length(ExecApp)-1].Cmd := Aplicativo.appfile+’ /install’;
 ExecApp[Length(ExecApp)-1].Index := Length(ExecApp)-1;
 ExecApp[Length(ExecApp)-1].OnEndProcess := TerminouExecutaAqui;
 ExecApp[Length(ExecApp)-1].Resume;
 end;
 (…)
 
 Boa sorte!
 _________________
 Mais uma contribuição http://www.kupsoft.com
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		|  |