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 >