![]() |
||||||||
|
|
||||||||


| com exemplos em VB |
| Componente para deixar forms em Vb semelhantes às telas do winnamp |
| Componente para colocar sua aplicação VB no Systray |
| Componente para transformar sua aplicação VB em serviço |
| Ferramentas úteis para quem usa Olap Server |
| |

|
||||||||||||||||
Pesquisa personalizada
Deployment sob demanda com ClickOnce Eis mais um artigo sobre o ClickOnce. Mas vamos um pouco além do tradicional Next-Next-Finish. Afinal de contas, o que é o ClickOnce ? Para responder a esta pergunta, precisamos recorrer a um pouco de história. Quando a web surgiu atraiu a todos, não apenas aqueles que desejavam uma presença na web, mas também desenvolvedores de software que começaram a desenvolver para web aplicações que iriam funcionar internamente na empresa. Por que ? A resposta é muito simples : Por causa do deployment de aplicações windows na época. Era um verdadeiro caos, muito difícil. A empresa sempre gastava muito dinheiro : Ou gastava muito dinheiro com muitos profissionais para resolverem problemas máquina por máquina ou gastava muito dinheiro com software e tecnicos especializados na operação de softwares para distribuição em massa de aplicações. Com a web, o custo evaporou-se, foi a zero. Foi o sonho de todos, por isso todos foram para a web, apesar da interface ser levemente inferior a windows (algumas coisas, como drag-and-drop, são no mínimo muito difíceis de fazer). Mas os recursos de deployment evoluiram, especialmente com a chegada do .NET . O framework já estaria instalado nas máquinas client, então o deployment de uma aplicação seria muito mais simples. Surgiram então duas alternativas de deployment :
Ambas são soluções legais, mas incompletas. Em cada um, falta exatamente o outro. A idéia da Microsoft foi então juntar os dois : Aplicações auto-atualizáveis com download sob demanda pela web. Foi então que surgiu o clickOnce. Em sua forma básica o ClickOnce funciona como o Updater Application Block : Uma aplicação que checa por atualizações em seu servidor de origem. Vamos montar uma aplicação bem simples e fazer o deployment com o clickonce para que você possa observar isso: 1) Crie um novo projeto Windows 2) Altere a propriedade isMDIContainer para true 3) Insira um novo MainMenu no form 4) Adicione 1 Menu Principal "Opções" e 3 subMenus, "Item 1", "Item 2" e "Item 3"
5) Adicione mais 3 projetos do tipo ClassLibrary na solução, PrjHello1, PrjHello2 e PrjHello3 6) Em cada um, troque o nome da classe para clHello1, clHello2 e clHello3 respectivamente
7) Codifique cada uma das classes como abaixo, com mensagens diferentes : 66 Public Class clHello1 67 Public Sub Hello() 68 MsgBox("Alo! Alo !") 69 End Sub 70 End Class
8) No projeto windows, adicione references para os outros 3 projetos.
9) Codifique os 3 itens de menu da seguinte forma : 45 Private Sub Item1ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Item1ToolStripMenuItem.Click 46 47 48 Dim obj As New prjHello1.clHello1 49 obj.Hello() 50 End Sub 51 52 Private Sub Item2ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Item2ToolStripMenuItem.Click 53 54 55 Dim obj As New prjHello2.clHello2 56 obj.Hello() 57 End Sub 58 59 Private Sub Item3ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Item3ToolStripMenuItem.Click 60 61 62 Dim obj As New prjHello3.clHello3 63 obj.Hello() 64 End Sub
10) Rode a aplicação e teste seu funcionamento. 11) Clique com o botão direito no projeto e utilize a opção Publish para fazer uma publicação da aplicação para o servidor web.
12) Utilizando a página criada pela publicação da aplicação, instale a aplicação.
13) Observe os arquivos da aplicação instalados em c:\Documents and Settings\<usuario>\Local Settings\apps\2.0\<codigo>\<codigo>\<codigo> . A localização pode variar de acordo com a instalação do seu sistema operacional. As últimas pastas tem seu nome em código, mas você não terá dificuldade de identifica-las. 14) Pare o servidor web e rode a aplicação. Observe que a aplicação roda de forma independente do servidor web, como acontece com o Updater Application Block, ao contrário dos smartClients.
15) Altere a mensagem da classe clHello1 16) Recompile a solução 17) Publique novamente a aplicação. Observe que a identificação de versão é alterada.
18) Rode a aplicação normalmente, pelo start menu. Chame o 1o item de menu, que dispara a mensagem da dll alterada. Observe que a aplicação se atualizou e a mensagem encontra-se atualizada, exatamente da forma como ocorre com o Updater Application Block.
Para que o clickOnce permita, além da checagem de atualizações, o download sob demanda de partes da aplicação, precisaremos programar um pouco mais. Primeiramente, precisamos agrupar os arquivos, criando desta forma conjuntos para download. A partir do momento que agrupamos os arquivos estes já não são considerados como obrigatórios na aplicação, por isso não são instalados automaticamente no setup inicial da aplicação. Então vamos fazer isso, passo a passo : 1) Entre nas propriedades do projeto 2) Clique em Publish
3) Clique em Application Files
4) Vamos alterar o download group das DLLs. Abra a caixa de download group, clique em New e digite um novo nome para o download group. Coloque cada dll em um download group diferente, com o nome da dll, sem extensão.
Estes assemblies não serão instalados junto com a aplicação, mas também não são instalados sob demanda. A instalação sob demanda não é automatica, precisaremos programa-la, mas é simples. Toda aplicação .NET roda isolada no que é chamado de um Application Domain, ou AppDomain para os íntimos. A carga de novos Assemblies para a memória é um evento, um acontecimento a nível de application domain, os assemblies são carregados para dentro do AppDomain. O que precisamos fazer é interceptar um evento existente no AppDomain chamado AssemblyResolver. Esse evento é disparado sempre que o .NET procura um Assembly e não encontra. A tarefa de nossa aplicação é identificar a que grupo de arquivos esse Assembly pertence e realizar o download do respectivo grupo de arquivos. Veja o código para este evento, criado em um módulo : 1 Imports System.Reflection 2 Public Module Domain 3 Public Function MyResolveEventHandler(ByVal sender As Object, ByVal args As ResolveEventArgs) As [Assembly] 4 5 6 If My.Application.IsNetworkDeployed Then 7 8 Dim nomes As String() 9 Dim dllname As String 10 Dim newAssembly As Assembly 11 nomes = args.Name.Split(",")(0).Split(".") 12 13 dllname = nomes(0) 14 15 My.Application.Deployment.DownloadFileGroup(dllname) 16 17 Try 18 newAssembly = Assembly.LoadFile(Application.StartupPath + "\" + dllName + ".dll") 19 20 Catch e As Exception 21 Throw New ApplicationException("A carga falhou", e) 22 23 End Try 24 Return (newAssembly) 25 Else 26 Throw New ApplicationException("Assembly não pode ser encontrado nem baixado") 27 28 End If 29 End Function 30 End Module Vejam os passos que são realizados neste código :
Ainda falta um detalhe : Precisamos vincular esta rotina que encontra-se em um módulo com o evento de nosso application domain. Para fazer isso vamos utilizar um evento de start da aplicação. Então entre nas propriedades da aplicação e clique no botão "View Application Events".
Na janela de código que aparecerá, crie o seguinte código no evento Application_Startup :
31 Friend Class MyApplication 32 33 Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup 34 35 36 AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf WinHello.Modulo.MyResolveEventHandler 37 38 39 End Sub 40 End Class
Para testar a aplicação, faça o seguinte :
Com este exemplo vemos o ClickOnce funcionando como um misto das duas tecnologias : Ele tanto faz com que a aplicação tenha uma instalação e cheque suas atualizações on-line como também faz com que a instalação de partes da aplicação possa ser realizada por demanda. Para completar você pode fazer ainda um teste adicional : Atualize uma das dlls e publique novamente. Verá que a atualização automatica da aplicação continua funcionando mesmo com os componentes opcionais e a DLL será atualizada.
Dennes Torres
|
||||||||||||||||
|
Veja abaixo os comentários já enviados :
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Quer
saber mais?
Faça um curso na Búfalo Informática, Treinamento e Consultoria e Prepare-se para o Mercado! Veja o que a Búfalo tem para você. |
||||||||||||||||
© Búfalo Informática,
Treinamento e Consultoria -
Rua Álvaro Alvim, 37 Sala 920 • Cinelândia • Rio de Janeiro • RJ
Tel.: (21)2262-1368 • e-Mail: contato@bufaloinfo.com.br