Ai vem o segredinho de estado. Na verdade o que fiz foi o seguinte:

Criei um micro programa que é executado quando meu módulo abre. 
Desculpe, esqueci de falar.
Quando meu executável é aberto, ele verifica se há atualizações a serem 
feitas. Versão superior ou inferior.

Em caso positivo, ou seja, tendo atualizações pra serem aplicadas, abro 
o micro-programa que, ao ser aberto, fecha o módulo que o chamou e 
efetua o SaveToFile no diretório correspondente. Ao final disso, o 
micro-programa reabre o módulo.

Tudo isso utilizo a passagem de parâmetros do módulo principal para o 
micro-programa. Chamei esse cara de Update.exe e passo pra ele uma 
string mais ou menos assim:

WinExec(Pchar('UpDate.exe [OPERACAO.EXE]6.150'), SW_SHOWNORMAL);

No artigo que mencionei, está bem mais simples. O meu dei uma boa 
incrementada.

Quando o módulo reabre o programa Update.exe é fechado.

Olhe as imagens de detecção e atualização do sistema.
http://img244.imageshack.us/my.php?image=deteccaots6.jpg
http://img181.imageshack.us/my.php?image=atualizacaopj5.jpg

Note que tenho uma pergunta se o usuário quer ou não atualizar. Isso foi 
colocado na versão beta. Hoje já não existe mais. O sistema só avisa que 
vai atualizar e manda bala, assim evito que usuário clique em NÃO e 
nunca atualizem.

Qualquer coisa posso até disponibilizar os fontes do programa. Sem 
problema algum. Utilizo Firebird.

Adriano Santos
-------------------------------------------------------------
Editor Técnico Revista ClubeDelphi
www.delphitodelphi.blogspot.com
www.devmedia.com.br
www.devmedia.com.br/clubedelphi/pagina.asp




Fellipe Henrique respondeu:
>
> Olá Adriano, acho que só tem um probleminha aí... ao dar um 
> SaveToFile, voce
> está usando o arquivo, ou seja, nao vai deixar copiar por cima...
>
> Como voce resolveu isso?
>
> []s
>
> Em 08/01/08, Adriano Santos (Yahoo) <[EMAIL PROTECTED] 
> <mailto:falecom%40adrianosantos.pro.br>> escreveu:
> >
> > Darkzad,
> >
> > Posso dar outra sugestão?
> > Cara, criei um método de atualização que ficou infalível aqui. Olha só:
> > Criei uma tabela no banco chamada ATUALIZACOES conforme abaixo:
> >
> > CREATE TABLE ATUALIZACOES (
> > ID INTEGER NOT NULL,
> > NOME VARCHAR(30),
> > VERSAO INTEGER,
> > ARQUIVO BLOB SUB_TYPE 0 SEGMENT SIZE 80 NOT NULL
> > );
> >
> > E os registros na base ficam assim:
> >
> > FROTA.EXE | 6.150 | ????
> > OPERACAO.EXE | 6.149 | ????
> > COBRANCA.EXE | 6.127 | ????
> >
> > Quando o sistema abre ele faz uma select no banco usando o nome do
> > módulo (Operacao.exe, Frota.exe, Cobranca.exe). Nada como um
> > ExtractFileName não resolva. Feito isso verifico se a versão do sistema,
> > prevista em uma variável global, é inferior ou superior a que está no
> > banco.
> >
> > Se for inferior, faço um "download" do arquivo atualizado puxando
> > diretamente do banco de dados. Use:
> > QueryCAMPO_ARQUIVO.SaveToFile(ExtractFilePath(Application.ExeName));
> >
> > Se o módulo (na variável global) for superior, então faço o upload para
> > o banco usando:
> > QueryCAMPO_ARQUIVO.LoadFromFile(ExtractFilePath(Application.ExeName));
> >
> > Desta forma, basta instalar o executável novo em uma estação e nesta
> > mesma estação abrir ao menos uma vez o executável para que ele sozinho
> > faça a atualização do banco.
> > As demais máquinas serão automaticamente atualizadas assim que reabrirem
> > o sistema.
> >
> > Na ClubeDelphi 84 saiu um artigo sobre isso, foi de lá que peguei a
> > idéia. Porém a idéia do autor foi fazer um programinha a parte para
> > atualizar o banco. No meu caso já enfiei isso direto no executável de
> > produção.
> >
> > Ah e tem mais: todos os meus clientes usam uma dll. Cada cliente tem a
> > sua. Esse esquema tb previ a atualização automática das dlls.
> >
> > Xuxu beleza
> >
> > Adriano Santos
> > ----------------------------------------------------------
> > Editor Técnico Revista ClubeDelphi
> > www.delphitodelphi.blogspot.com
> > www.devmedia.com.br
> > www.devmedia.com.br/clubedelphi/pagina.asp
> >
> > Darkzad respondeu:
> > >
> > > Bom dia a Todos
> > >
> > > Pessoal, estou desenvolvendo um sistema na empresa e sempre ocorre
> > > atualizações a fazer e sempre tenho que pedir os usuários para sair do
> > > sistema.
> > >
> > > Gostaria de fazer algo no sistema que enviasse uma mensagem pedindo ao
> > > usuário que saia do sistema para atualização.
> > >
> > > Teria algo possível de resolver isso?
> > >
> > > Desde já agradeço
> > >
> > > Darkzad
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > > ----------------------------------------------------------
> > >
> > > No virus found in this incoming message.
> > > Checked by AVG Free Edition.
> > > Version: 7.5.516 / Virus Database: 269.17.13/1213 - Release Date:
> > 07/01/2008 09:14
> > >
> >
> >
>
> -- 
> _________________________________
> T.·.F.·.A.·.
> Fellipe Henrique
> [EMAIL PROTECTED] <mailto:fellipeh%40gmail.com>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 
> ------------------------------------------------------------------------
>
> No virus found in this incoming message.
> Checked by AVG Free Edition. 
> Version: 7.5.516 / Virus Database: 269.17.13/1213 - Release Date: 07/01/2008 
> 09:14
>   

Responder a