Fazer executavel se auto-copiar
FALA MOÇADA !!!
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 +
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
Curtidas 0
Respostas
Paulo_amorim
24/03/2004
Olá
Desculpe se estou errado, mas na minha terra esse eh o princípio dos Vírus...
Desculpe se estou errado, mas na minha terra esse eh o princípio dos Vírus...
GOSTEI 0
Michael
24/03/2004
Olá amigo!
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 :-)
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 :-)
GOSTEI 0
Marfred
24/03/2004
Olá amigo!
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 :-)
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
GOSTEI 0
Geno
24/03/2004
Olá amigo!
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 :-)
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...
GOSTEI 0
Spooner
24/03/2004
Olá amigo!
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
Sera que poderia me Enviar Tambem.
E-mail: jeronimodedeus@terra.com.br
Desde Já Obrigado
GOSTEI 0
Zacca
24/03/2004
gostaria de uma copia desse componente
zacca@click21.com.br
agradeço desde ja...
zacca@click21.com.br
agradeço desde ja...
GOSTEI 0
Aroldo Zanela
24/03/2004
Colega,
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).
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).
GOSTEI 0
Adilsond
24/03/2004
[b:adbaffc5d6]Atualizador de Aplicações[/b:adbaffc5d6]
[url]http://www.clubedelphi.com.br/aplicativos/atu_app.htm[/url]
[url]http://www.clubedelphi.com.br/aplicativos/atu_app.htm[/url]
GOSTEI 0
Aroldo Zanela
24/03/2004
[b:4e1de7a68b]Atualizador de Aplicações[/b:4e1de7a68b]
[url]http://www.clubedelphi.com.br/aplicativos/atu_app.htm[/url]
Boa AdilsonD!!!!!
GOSTEI 0
Ediclo Junior
24/03/2004
Olá amigo!
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 :-)
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..
GOSTEI 0
Hélio Devmedia
24/03/2004
Queridos, sem utilizar componente eu resolvo assim,
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
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
GOSTEI 0