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 delas!
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 dinâmicamente 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 interrupçõ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. Você pode efetuar o download do projeto aqui.
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 SubNo 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 FunctionNesta 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 SubNesta Sub o programa utiliza a API FindWindow 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 SubEsta 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 ser desenvolvido, 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. Um abraço e até uma próxima ocasião!







