Criando projetos de Setup : O que mudou ?
Uma das grandes mudanças para os usuários do Visual Basic na versão .NET foi a maneira de como distribuir e instalar suas aplicações . As coisas ficaram mais simples , pelo menos até você compreender como as coisas funcionam no VB .NET.
Se você ainda se sente meio perdido com a nova plataforma e não sabe como criar um simples instalador para seus programas VB .NET neste artigo eu pretendo dar uma mãozinha para você poder entender como as coisas funcionam. (Leia o artigo Gerando meu primeiro pacote de instalação no VB.NET para saber mais a respeito.)
Primeiro vou tentar convencê-lo das vantagens que a nova plataforma .NET trouxe para geração de arquivos de distribuição para o VB .NET:
Nada de COM com seus problemas de compartilhamento de componentes. Os grupos são a substituição da Microsoft para os componentes e os tradicionais arquivos de aplicativo, incluindo metadados internos afim de evitar o tão conhecido 'inferno das DLLs'.
Nada de registros de componentes. Com os grupos você não precisa mais se preocupar com o registro para manter a atualização e as informações sobre os seus componentes. Agora todas elas são armazenadas nos arquivos de programas , desta forma você pode copiar aplicativos e componentes de um computador para outro sem se preocupar com versões.
Adeus a ferramentas de terceiros para gerar seu instalador. No VB6 o PDW - Package and Development Wizard - não oferecia muitas opções de personalização na geração de um instalador . O .NET oferece projetos de inicialização e Setups com muitos recursos que você inclui nos seus aplicativos.
Tradicionalmente suas aplicações VB eram compostos de componentes que eram distribuídos como arquivos .EXE ou DLL , que podiam usar outros componentes como arquivos .dll , arquivos .ocx (só para citar os mais usados). Geralmente estes componentes ficavam 'espalhados' pelo seu computador (geralmente na pasta do diretório de sistema do Windows). Então para tudo funcionar corretamente todos os arquivos teriam que estar presentes com suas versões mais atuais.
Na plataforma .NET (estou incluindo o VB .NET) você também vai achar arquivos .DLL e .EXE além dos componentes COM (por questão de compatibilidade) , mas , existe uma diferença importante : Eles agora são conhecidos como : assemblies (vou chamar de grupos). Um assembly ou grupo (na minha tradução ) é como se fosse uma DLL lógica e corresponde a um componente do aplicativo , ou seja ele é composto por todas as funções e recursos que você usou na sua aplicação e quando você compila a sua aplicação tudo fica dentro de um arquivo .EXE formando um único grupo ou assembly. Naturalmente você pode criar mais de um grupo para sua aplicação. Quais as vantagens ?
Os grupos são auto-descritivos - cada grupo contém um ou mais arquivos de programa e um arquivo manifesto que inclui informações que chamamos de metadados (dados a respeito dos dados) que são informações sobre o seu programa: nome , versão , dependências, etc. Logo você não precisa mais gravar estas informações no registro do Windows , ou seja , registrar o seu aplicativo , como tinha que fazer com os componentes COM.
Os grupos não precisam de registro pois todas as informações necessárias para usar o componente ou rodar o seu aplicativo estão contidas no manifesto do grupo (um arquivo .DLL ou .EXE). Se você copiar seu aplicativo e componentes para outro computador as informações vão junto e o programa pode funcionar sem problemas. (chega de usar o regsvr32.exe).
Os grupos 'mantém' as versões atualizadas - Como os arquivos de manifesto registra informações sobre as versões atuais de todos os arquivos incluídos , sempre que você gerar uma nova versão , as informações da nova versão serão escritas de forma automatica no manifesto , assim ele não fica desatualizado (out of date. Lembra ???). Então ao executar um grupo (seu .EXE) a CLR - Common Language Runtime - vai verificar se as informações de versão e o código ainda são válidos.
Você pode compartilhar os grupos de forma privada - Os componentes COM (.dll , .ocx) de terceiros tinham que estar presentes num lugar específico , geralmente \windows\system ou \winnt\system32 , assim você tinha um monte de arquivos amontoados num único lugar do seu sistema. No .NET você tem agora o GAC - Global Assembly Cache - Armazenamento Global de Grupo - que se presta ao mesmo objetivo. Agora você não tem que copiar para o mesmo local componentes privados que somente serão usados por uma aplicação ,os grupos privados são armazenados em seu diretório de aplicativo e são realmente privados.
Os grupos podem ser executados lado a lado - agora você pode instalar múltiplas versões de um único componente e quando você for executar o aplicativo o .NET usa a versão do componente para o qual ele foi desenvolvido ; se você rodar um outro programa que usa o mesmo componente a CLR vai carregar a versão correta usada pelo programa. Cada aplicativo usa o conjunto de componentes para o qual ele foi destinado.
Nota : A GAC - Global Assembly Cache - é uma área dedicada ao armazenamento de grupos disponíveis para todo o sistema. O .NET não usa mais um diretório de sistema onde estão drivers e outros dispositivos do sistema ele usa a GAC para armazenar os grupos para sua aplicação. Ao usar COM um componente tinha que fazer parte do registro global para ser usado. Se você desenvolve o seu próprio componente não vai precisar usa a GAC basta copiá-lo no diretório do seu aplicativo. Use a GAC para componentes que deseja tornar globalmente disponíveis. Vamos dar uma olhada na GAC ?? Procure a pasta \Windows\assembly ou \WINNT\assembly : você vai ver algo parecido com a figura abaixo: |
|
Voltando aos grupos(assemblies) , vou mostrar como você pode ver o seu aplicativo como um grupo. Todos os aplicativos que você criou até agora usando o VB .NET são grupos . Vamos dar uma espiada em um deles usando o programa ILDasm.exe (IL Disassembler). Você encontra este arquivo na pasta : \Arquivos de programas\Microsoft Visual Studio .NET\FrameworkSDK\Bin . Veja na figura abaixo :
Acima , na figura da esquerda esta a pasta com o arquivo ildasm.exe , e na figura da direita temos a execução do arquivo abrindo um grupo arquivo .EXE ou .DLL) que eu já tinha criado no VB .NET . Temos uma árvore mostrando informações sobre o aplicativo - ADO_net.exe - e sobre os tipos definidos nos metadados do grupo. Se você clicar duas vezes sobre um método ou propriedade vai ver a lista de instruções .NET criadas com base no seu código de programa. Abaixo o código para a propriedade get_DataGrid1
Lembra do arquivo de manifesto de que tinha falado ? Ele esta no topo da árvore , e , se você clicar duas vezes sobre ele vai ver informações sobre a versão do seu grupo , dependências (declarações assembly extern) , etc:
Analisando as informações acima podemos ver que este grupo vai precisar do grupo System.Data para funcionar e que a versão usada é a : 1:0:3300:0 ( o formato é : maior.menor.construção.revisão ).
As informações sobre nome , número da versão , etc. estão no arquivo AssemblyInfo.vb. Abrindo este arquivo para o grupo que estamos analisando veremos as seguintes informações:
Imports System.ReflectionImports System.Runtime.InteropServices' General Information about an assembly is controlled through the following ' set of attributes. Change these attribute values to modify the information ' associated with an assembly. ' Review the values of the assembly attributes < Assembly: AssemblyTitle("")>< Assembly: AssemblyDescription("")>< Assembly: AssemblyCompany("")>< Assembly: AssemblyProduct("")>< Assembly: AssemblyCopyright("")>< Assembly: AssemblyTrademark("")>< Assembly: CLSCompliant(True)>'The following GUID is for the ID of the typelib if this project is exposed to COM < Assembly: Guid("CAAB0256-70AF-455E-AC76-F99807D82E9B")>' Version information for an assembly consists of the following four values: ' ' Major Version ' Minor Version ' Build Number ' Revision ' ' You can specify all the values or you can default the Build and Revision Numbers ' by using the '*' as shown below: < Assembly: AssemblyVersion("1.0.*")> |
Para recuperar informações sobre o grupo ( versão atual , nome , etc...) podemos usar a classe System.Windows.Forms.Application (que substitui objeto App do VB6/5) e , se você quiser ir mais além pode usar a classe System.Reflection.Assembly para recuperar informações sobre um grupo.
Percebeu agora como as coisas mudaram !!!
Se você se deixou se convencer vamos passar a apresentar os diferentes tipos de Setup presentes no Visual Basic .NET. Para ver os projetos de Setup , acesse o menu File | New | Project , selecione a seguir : Setup and Deployment Project e verá a figura abaixo os modelos de projeto de Setup.
Vamos abordar cada um deles para você se familiarizar :
Setup Project - O projeto principal de Setup
Web Setup Project - Projeto de Setup que instala projetos diretamente no IIS - Internet Information Server.
Cab Project - Cria arquivos .CAB.
Merge Module Project - Cria pacotes que podem fazer parte de outros projetos de Setup.
Setup Wizard - Um assistente que o auxilia a criar um dos projetos já mencionados.
vai continuar...
José Carlos Macoratti