Criando um auto-update para o seu sistema

Veja neste artigo como criar um auto-update para o seu sistema

Criando um auto-update para o seu sistema

Danilo Buzar (e-mail) trabalha com programação web desde 2001, principalmente com as linguagens cliente-servidor ASP e IntraWeb. Também possui conhecimentos em DHTML, Java Script, PHP, CSS, SQL Server e Access.

Olá leitores do iMasters!

É com grande satisfação que escrevo meu primeiro artigo para o iMasters. Meu desafio foi escrever um artigo que fosse útil e ao mesmo tempo fácil de ser implementado e/ou modificado por vocês. Espero que vocês gostem da qualidade da matéria e, nas próximas, continuarei me esforçando para manter o bom nível de escrita e didática nelas!

Bom, nesta matéria falo sobre um assunto que muitos de nós ficamos com dúvidas de como começar a implementar, o ambiente a se distribuir e qual forma mais eficaz de fazê-lo. Estamos falando em como atualizar dinamicamente sistemas feitos em VB 6 e que, na maioria das vezes, estas aplicações estão sendo utilizadas em ambientes críticos e não podem haver bugs que causam implicações na dinâmica dos trabalhos.

Abaixo temos o cenário do nosso ambiente de rede fictício:

01 Servidor

05 Máquinas cliente em ambiente de produção

01 Máquina de desenvolvimento do aplicativo

Temos abaixo os componentes usados em nosso programa:

Formulários: frmPrincipal.frm

Componentes: pBar (Progress Bar) e *txtLog (TextBox)

Classes (Módulos): ModPrincipal.bas

* Usado para armazenar as informações em run-time do atualizador e posteriormente serem gravadas em arquivo.

Já vimos o básico para o início do projeto, então, mãos a obra!

** Nesta parte irei explicar somente os pontos mais importantes do código para resumir a matéria e não deixá-la muito extensa. Em anexo você encontra o projeto para download.

frmPrincipal

Private Sub Form_Load()

'Configurações iniciais
PodeFechar = False
Me.Visible = False
CentralizaForm Me
Me.MousePointer = 11
pBar.Max = 100
pBar.Min = 0
pBar.Value = 0
LocalFile = App.Path  "\Aplicacao.exe"
NetFile = "\\Servidor\Aplicacao\MinhaAplicacao.exe"

'Inicia o processo de verificação entre datas de arquivos
VerificaSeExisteAtualizacao

End Sub

No Load do Form eu faço todas as configurações iniciais como inibição do form, centralização e o principal: atribuição dos caminhos dos arquivos a serem atualizados.

Private Function VerificaSeExisteAtualizacao() As Boolean

'Obtém a data dos arquivos a serem atualizados
DefineDataArquivos

'Verifica se a data do arquivo local é menor do que a data do arquivo remoto
If CDate(LocalDateFile) < CDate(NetDateFile) Then
MsgBox "Existe uma nova atualização do programa!"  Chr(13)  _
String(10, " ")  "Clique em OK para atualizar.", _
vbInformation, "Nova atualização!"

Me.Show
'Chama a subrotina que atualiza os arquivos
AtualizaPrograma

'Sai da aplicação
FinalizaAtualizador
Else
FinalizaAtualizador
End If

End Function

Nesta função, o programa compara as datas dos arquivos a serem atualizados. Caso a condição seja satisfeita o programa chama a subrotina que atualiza os arquivos, caso contrário o atualizador se auto-finaliza.

Private Sub FechaPrograma()
Dim WinHndl As Long

On Error GoTo Erro_Handle

WinHndl = FindWindow(vbNullString, "Arquivo.txt - Bloco de Notas")

If WinHndl > 0 Then
PostMessage WinHndl, WM_CLOSE, 0, 0
End If

Exit Sub

Erro_Handle:
MsgBox "Impossível definir o Handle!", vbCritical, "ERRO!"
Escreve_Log ("Impossível definir o Handle!")
Escreve_Log (Err.Number  " - "  Err.Description)
GeraLog ("Log.txt")
FinalizaAtualizador
End Sub

Nesta Sub o programa utiliza a API [sigla]FindWindow[/sigla] do Windows para verificar o Handle da janela informada e caso encontre, automaticamente fecha a aplicação informada.

Private Sub CriaBackup()
Dim ExtensaoArquivo As String

On Error GoTo Erro_CriaBackup

'Define nome do Backup
NomeArquivoBackup = Mid(LocalFile, 1, Len(LocalFile) - 4)
ExtensaoArquivo = Right(LocalFile, 4)
NomeArquivoBackup = NomeArquivoBackup  AdicionaZero(Day(Now()))  _
AdicionaZero(Month(Now()))  Right(Year(Now()), 2)  "_"  _
AdicionaZero(Hour(Now()))  AdicionaZero(Minute(Now()))  _
ExtensaoArquivo

'Gera o Backup
FileCopy LocalFile, NomeArquivoBackup

'Deleta o arquivo atual
Kill LocalFile

Exit Sub

Erro_CriaBackup:
MsgBox "Erro ao criar o backup!", vbCritical, "ERRO!"
Escreve_Log ("Erro ao criar o backup!")
Escreve_Log (Err.Number  " - "  Err.Description)
GeraLog ("Log.txt")
FinalizaAtualizador
End Sub

Esta sub é importante para manter o backup dos arquivos atualizados e caso haja algum problema de atualização, basta reverter o processo.

Abaixo temos o fluxograma do cenário exemplo



Fluxograma do cenário

Portanto, vimos na matéria que esta aplicação não é algo de difícil de desenvolver, porém, este processo envolve alguns outros pontos importantes que temos que nos atentar, como: Horário de atualização, quantidade de atualizações e se for o caso, analisar uma distribuição ordenada.

Pessoal, a matéria chegou ao seu fim, e espero que este artigo tenha um bom proveito para vocês. Espero vê-los em uma próxima ocasião. Até mais!

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados