Fazer executavel se auto-copiar
24/03/2004
0
Preciso de algo, naum sei se é possivel do jeito que eu quero...
Rodo meu programa em rede, e toda vez q um usuario pede uma atualizacao pra mim, todos os usuarios tem que encerrar o programa para eu poder jogar o executavel no diretorio compartilhado.
Resolvi meu problema, cada usuario tem seu executavel na maquina(rodando local). Fiz isso com um processo num arquivo .bat q sempre copia o executavel do servidor para o micro local, sendo assim naum é necessario todos os micros encerrarem o programa para a atualizacao, e sim, somente quem pediu a atualizacao.
Meu problema é o seguinte...
Eu gostaria de fazer issso num so executavel(sem o arquivo .bat), q seria no meu proprio programa(eu acho, em termos de arquivo, que isso é impossivel, mas naum custa tentar... hehehe).
Quando o usuario executar o meu programa ele se auto copia para o micro local e roda somente o executavel local....
Naum sei se fui claro...
Eu acho q viajei querendo fazer um negocio desse.... rssss
Falow !!!
T +
Marfred
Posts
24/03/2004
Paulo_amorim
Desculpe se estou errado, mas na minha terra esse eh o princípio dos Vírus...
24/03/2004
Michael
Eu particularmente não acho que você queira fazer um vírus, não é? :-)
Eu passei pelo mesmo problema que você anos atrás, pois sempre que precisava atualizar o programa, o Delphi não podia gerar o arquivo executável porque ele estava sendo utilizado por outras máquinas. Em suma, não era ´culpa´ do Delphi, mas sim da arquitetura do Windows, que bloqueia os arquivos enquanto eles estão abertos. Isso vale para qualquer arquivo, não apenas programas.
Bom, quando eu programava em Delphi 5 eu usava um componente que achei na Internet que, quando o aplicativo era executado, ele copiava o executável para a pasta temporária do computador executante, fechava o software original e executava a cópia que ele tinha acabado de fazer. Mas quando migrei para Delphi 6, não consegui utilizá-lo porque ele não tinha o código fonte aberto, apenas compilado (DCU). Então eu fiz um componente idêntico, em D6, que utilizo hoje em meus sistemas que rodam em rede. Com ele, eu sempre posso atualizar o programa, e basta aos usuários reiniciarem para q as atualizações tenham efeito. Eu fico livre para programar.
Se você estiver interessado, poste aqui uma mensagem que terei prazer em ajudá-lo!
Abraços,
Michael Benford :-)
24/03/2004
Marfred
Fala meu gênio !!! De um kra assim que a comunidade sempre precisa...
Kra, se puder me ajudar loko !! eu estou com esse mesmo problema que vc tinha...
se puder me ajudar kra... valew mesmo !!!!
marfred2004@uol.com.br
24/03/2004
Geno
Eh tipo...Aki eh mais ou memos parecido.
NA atualizacao de versao, o sistema baixa do servidor um ZIP com dois aplicativos. Um eh o exe da nova versao, o outro chamamos de ReplaceFIle.
Uma vez baixados, o sistema descompacta o zip em outro diretorio temporario e executa o ReplaceFile, que por sua vez finaliza o sistema, deleta o executavel velho, move o executavel novo da pasta temporaria para a pasta correta e executa o novo executavel.
O novo executavel ao entrar, checa se existe a pasta temporaria, se existir ele apaga e pow. Fica tudo novo...
24/03/2004
Spooner
Sera que poderia me Enviar Tambem.
E-mail: jeronimodedeus@terra.com.br
Desde Já Obrigado
24/03/2004
Zacca
zacca@click21.com.br
agradeço desde ja...
25/03/2004
Aroldo Zanela
Ainda acho que uma parada programada numa LAN seja mais eficiente que gerar um tráfego desnecessário entre o servidor e todas as estações de trabalho. Imagine numa rede de +- 1000 máquinas com executáveis de 10 MB, mesmo aplicações n-tier, basta um único executável compartilhado na rede.
No entanto, uma solução simples para seu problema seria utilizar um módulo de carga (também centralizado) que poderia verificar a data e hora do executável da rede e se diferente (mais recente) poderia efetuar a cópia para a estação e em seguida carregá-lo (Processo, WinExec, etc).
25/03/2004
Adilsond
[img:adbaffc5d6]http://www.clubedelphi.com.br/aplicativos/img_atu_app.gif[/img:adbaffc5d6]
[url]http://www.clubedelphi.com.br/aplicativos/atu_app.htm[/url]
25/03/2004
Aroldo Zanela
Boa AdilsonD!!!!!
19/02/2019
Ediclo Junior
Eu particularmente não acho que você queira fazer um vírus, não é? :-)
Eu passei pelo mesmo problema que você anos atrás, pois sempre que precisava atualizar o programa, o Delphi não podia gerar o arquivo executável porque ele estava sendo utilizado por outras máquinas. Em suma, não era ´culpa´ do Delphi, mas sim da arquitetura do Windows, que bloqueia os arquivos enquanto eles estão abertos. Isso vale para qualquer arquivo, não apenas programas.
Bom, quando eu programava em Delphi 5 eu usava um componente que achei na Internet que, quando o aplicativo era executado, ele copiava o executável para a pasta temporária do computador executante, fechava o software original e executava a cópia que ele tinha acabado de fazer. Mas quando migrei para Delphi 6, não consegui utilizá-lo porque ele não tinha o código fonte aberto, apenas compilado (DCU). Então eu fiz um componente idêntico, em D6, que utilizo hoje em meus sistemas que rodam em rede. Com ele, eu sempre posso atualizar o programa, e basta aos usuários reiniciarem para q as atualizações tenham efeito. Eu fico livre para programar.
Se você estiver interessado, poste aqui uma mensagem que terei prazer em ajudá-lo!
Abraços,
Michael Benford :-)
gostaria de uma copia desse componente
ediclo.jr@gmail.com
agradeço desde ja..
20/02/2019
Hélio Devmedia
Ao iniciar meu aplicativo eu faço um MD5 Hash do próprio executável e um do que está na rede e comparo os valores. Se for o mesmo hash, então não tem atualização, mas se for diferente é porque tem nova atualização, assim, eu simplesmente troco o nome do próprio executável aberto usando TFile.Move('Project11.exe', 'ProjectXXXXX.exe'); (o windows permite renomear um executável em uso), puxo o da rede (que está com o nome correto) jogo uma mensagem para o cliente dizendo que o programa atualizou e será fechado e peço para abrir novamente...
Espero ter ajudado
Clique aqui para fazer login e interagir na Comunidade :)