Blz Marcos, vamos lá.

 >> Bem interessante...Mas se retirar a pergunta, como você vai 
atualizar um EXE que está sendo executado?
 >> Vai terminar o programa
 >> abruptamente, independente do que o usuário esteja fazendo no momento?

Por isso que ainda não tirei a mensagem. Hoje temos 5 módulos, 5 
executáveis distintos e todos tem a mesma checagem em seu código fonte. 
Cada um atualiza sozinho, ou seja, quando meu cliente abre o 
Operacao.exe e este precisa ser atualizado, ele sozinho vai no banco e 
pega a última versão e vice-versa. Se o cara abrir o Cobranca.exe, mesma 
coisa. Porém, cada cliente tem uma dll e a mesma é utilizada por todos 
os módulos. Se o cara estiver com o Operacao aberto e abrir o Cobranca, 
ao detectar que o Cobranca precisa ser atualizado, sou obrigado a fechar 
o Operacao, do contrário não consigo sobrepor a dll certo?  Nesse caso 
se o cliente estiver fazendo algo no Operacao ele vai perder tudo, pois 
utilizo um SendMessage pra forçar o fechamendo de TODOS os módulos abertos.

Estou mudando isso. Quando for atualização apenas do executável, o 
micro-programa fará o fechamento somente do módulo que precisa ser 
atualizado. Como a detecção acontece ao abrir o executável, não tem como 
o cliente estar usando algo, então mato a pau.

Agora, se precisar atualizar dll, ai terei que manter a mensagem SIM/NAO 
para evitar de detonar o processo dele.

Esse processo que falei, realmente é um pouco complexo, mas confesso que 
fiz o desenvolvimento em 3 horas de programação e reduzi muito a 
quantidade de problemas. Meus clientes são de transportes de carga, e os 
usuários nessas empresas são ruins cara, muito ruins, isso me ajudou 
bastante.

Quanto a parte on-line, funcionará assim.
No meu site estou criando um banco de dados que contém o nome do usuário 
(senha do meu cliente ao acesso restrito), versão da dll e diretório que 
ela se encontra, já que posso ter mais que uma dll para o mesmo cliente 
por causa de suas filiais. Algo assim:

Usuario | Versao | Diretorio
JOSE    |      1 | WWW/Clientes/JOSE/Filial/Infotec.dll
PEDRO   |      2 | WWW/Clientes/PEDRO/Filial/Infotec.dll
VANESSA |      1 | WWW/Clientes/VANESSA/Filial/Infotec.dll

O micro-programa que falei, vai executar em background, ainda não sei 
bem como vai funcionar. Se será aberto junto com o Windows, ou junto com 
algum módulo, enfim. Ficará rodando. O software vai pegar a versão do 
módulo e dll no banco de dados e comparar com a versão que está on-line. 
Se perceber que o cliente está desatualizado, o programa faz o download 
do arquivo em uma pasta temporária e atualiza o banco de dados do 
cliente. A próxima vez que o cliente fechar o sistema e abrir de novo o 
módulo e/ou dll serão atualizados.

Claro, os clientes que não tem internet direto serão tratados como 
exceção. Farão o download de tempos em tempos, como são poucos não tem 
problema.

Pra fechar, estamos terminando um Gerenciador que faz o Upload para 
nosso FTP dos módulos do sistema e atualiza do banco on-line. As dlls 
cliente seguem o mesmo processo. Atualizamos o ambiente ele e a versão 
da dll. Não tem segredo.

Tudo isso pra reduzir o número de ligações no suporte.

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




Marcos Douglas respondeu:
>
> >
> > Como falei existe um programa que roda em background, update.exe. Ele é
> > chamado automaticamente pelo próprio módulo. O cliente não faz nada, só
> > clica em Sim quando recebe a mensagem que o sistema precisa ser
> > atualizado. Só. Daqui a alguns dias a pergunta será retirada e o sistema
> > será atualizado automaticamente.
>
> Bem interessante... Mas se retirar a pergunta, como você vai atualizar um
> EXE que está sendo executado? Vai terminar o programa abruptamente,
> independente do que o usuário esteja fazendo no momento?
>
> Qualquer usuário na rede baixa os módulos do meu site e abre ao menos
>
> > uma vez o módulo, pronto. Todo mundo tah atualizado. Não preciso criar
> > uma bat para cada cliente, não preciso mapear unidade de rede, não
> > preciso pedir pra sair do sistema e nem preciso pedir pra clicar em
> > atalho.
>
> OK Adriano, isso funciona muito bem (também). A solução do BAT é a mais
> simples possível, não que seja a melhor...
> Obs1: A unidade de rede não precisa ser, obrigatoriamente, mapeada... Só
> temos que ter um endereço de onde buscar o EXE, da mesma forma que 
> consta um
> endereço (URL) no seu sistema para baixar os módulos pela internet.
> Obs2: Não pedimos para os clientes clicar no atalho quando o sistema 
> tem que
> ser atualizado. O atalho É o sistema. Acontece que sempre que o 
> usuário vai
> utilizar o sistema, ele tem que inicializá-lo e isso é feito através do
> atalho. Então, sempre que ele entra no sistema, este é atualizado, quando
> assim o desejamos.
>
> Hoje, como falei, reduzi o número de problemas quase zero. Agora estou
> > finalizando a atualização on-line. Falo os resultados depois.
>
> A solução do BAT não serve muito bem para internet. Seria de grande 
> valia se
> você postasse sua solução aqui.
> Abraços
> MD
>
> >
> >
> >
> > Marcos Douglas respondeu:
> > >
> > > Adriano,
> > > A letra "Z" foi apenas como exemplo. Claro que cada um deve adaptar o
> > > BAT de
> > > acordo com a empresa na qual trabalha, certo? ;-)
> > >
> > > Eu já havia falado que é pra colocar um Atalho do BAT no Desktop do
> > > usuário.
> > > Todos os usuários iriam clicar diretamente no Atalho ao invés de ir
> > > procurar
> > > o EXE no Windows Explorer...
> > > Fazendo dessa forma, não é preciso técnico algum.
> > >
> > > Abraços
> > > mD
> > >
> > > On 1/8/08, Adriano Santos (Yahoo) <[EMAIL PROTECTED] 
> <mailto:falecom%40adrianosantos.pro.br>
> > > <mailto:falecom%40adrianosantos.pro.br>> wrote:
> > > >
> > > > Ótimo.
> > > >
> > > > E se a letra Z: não existir ou foi mapeada com outra letra?
> > > > E se o usuário não abrir o BAT, terá que colocar no inicializar do
> > > > Windows?
> > > >
> > > > Se você enviar um técnico ao local beleza, pois ele se encarrega 
> de ir
> > > > máquina a máquina checar, mas se tiver clientes em Manaus por 
> exemplo,
> > > > fica difícil ter certeza que o usuário fez tudo bonitinho como 
> manda a
> > > > figurino.
> > > >
> > > > Tínhamos BAT e o deploy era problemático. Hoje temos esse 
> esquema. Os
> > > > bancos de nossos clientes cresceram 20 mb, porém reduzi o número de
> > > > problemas para 10%, pois ainda não temos um esquema para atualização
> > > > on-line.
> > > >
> > > > Estamos montando um programinha bem pequeno que fará o download dos
> > > > módulos em uma pasta temporária e em seguida atualiza o banco do
> > > > cliente. Esse utilitário funcionará sozinho sem interação com o
> > usuário.
> > > > Automaticamente a próxima vez que alguém entrar no sistema o mesmo
> > será
> > > > atualizado. 100% de problemas resolvidos.
> > > >
> > > > Adriano Santos
> > > > ----------------------------------------------------------
> > > > Editor Técnico Revista ClubeDelphi
> > > > www.delphitodelphi.blogspot.com
> > > > www.devmedia.com.br
> > > > www.devmedia.com.br/clubedelphi/pagina.asp
> > > >
> > > >
> > > >
> > > >
> > > > Marcos Douglas respondeu:
> > > > >
> > > > > Adriano,
> > > > > Uma forma mais fácil de fazer isso é com um arquivo BAT:
> > > > > @echo off
> > > > > xcopy z:\sistema.exe c:\sistema /d /Y
> > > > > start c:\sistema\sistema.exe
> > > > > exit
> > > > >
> > > > > É só criar um atalho para o usuário usar o BAT e não clicar
> > > diretamente
> > > > no
> > > > > EXE.
> > > > >
> > > > > Darkzad,
> > > > > Para enviar uma mensagem ao usuário, é só você comparar os
> > > arquivos (do
> > > > > servidor com o da máquina local) assim:
> > > > > if FileAge('z:\sistema.exe') > FileAge('c:\sistema\sistema.exe')
> > then
> > > > > // mensagem ao usuário com um form Modal avisando para atualizar o
> > > > > sistema...
> > > > >
> > > > > PS: Considerei o driver Z: como sendo o servidor mapeado.
> > > > >
> > > > > Abraços
> > > > > Marcos Douglas
> > > > >
> > > > > On 1/8/08, Adriano Santos (Yahoo) 
> <[EMAIL PROTECTED] <mailto:falecom%40adrianosantos.pro.br>
> > > <mailto:falecom%40adrianosantos.pro.br>
> > > > > <mailto:falecom%40adrianosantos.pro.br>> wrote:
> > > > > >
> > > > > > 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
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
> > > > > >
> > > > > > Links do Yahoo! Grupos
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > > [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
> > > > >
> > > >
> > > >
> > > > --
> > > > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
> > > >
> > > > Links do Yahoo! Grupos
> > > >
> > > >
> > > >
> > >
> > > [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.19.0/1216 - Release Date:
> > 1/9/2008 10:16 AM
> > >
> >
> > --
> > Adriano Santos
> > ----------------------------------------------------------
> > Editor Técnico Revista ClubeDelphi.
> > http://www.delphitodelphi.blogspot.com 
> <http://www.delphitodelphi.blogspot.com>
> > http://www.devmedia.com.br <http://www.devmedia.com.br>
> > http://www.devmedia.com.br/clubedelphi/pagina.asp 
> <http://www.devmedia.com.br/clubedelphi/pagina.asp>
> >
> >
> >
> >
> > --
> > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
> >
> > Links do Yahoo! Grupos
> >
> >
> >
>
> [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.19.0/1216 - Release Date: 09/01/2008 
> 10:16
>   

Responder a