JcmSoft - VB.NET  Gerando meu pacote de instalação - Windows Installer.

No artigo - Gerando meu primeiro pacote de instalação no VB.NET - eu mostrei como criar um pacote de instalação para sua aplicação VB.NET. 

Neste artigo eu vou abordar algumas questões que não foram mencionadas no artigo anterior ,  como a instalação do .NET Framework junto com sua aplicação e outros detalhes de personalização que veremos.

Para não perder tempo vou partir do ponto no qual já estamos com a aplicação VB.NET pronta esperando para gerar o pacote de distribuição.

Você pode carregar qualquer projeto já pronto no VB.NET ; eu vou carregar um projeto que mostra como usar o controle TreeView.

A aparência do projeto em execução é exibida ao lado.

Não estou me preocupando com o projeto em si. Vamos focar nossa atenção na geração do pacote de instalação para este projeto.

Obs: Em um outro artigo eu vou falar sobre o projeto Treeview em detalhes

 

Abaixo temos as opções de projetos de instação disponíveis no VB.NET.
No Visual Basic.NET não existe mais o Package & Deployment , não adianta procurar .

O VB.NET inclui agora modelos de projetos que permitem criar um pacote de instalação Windows (Windows Installer) para distribuir sua aplicação.

Um projeto Windows Installer é um tipo especial de projeto do Visual Studio.NET que não é específico da linguagem VB.NET.

 Nas versões anteriores do Visual Basic os pacotes eram baseados em arquivos de scripts , no VB.NET tudo mudou (para variar ) , e , agora você configura opções de inicialização através de designers especiais e janelas de diálogos de propriedades.

Veja ao lado as opções de modelos de projetos para gerar pacotes de instalação no VB.NET

 

Então vamos ao trabalho...

Criando um projeto Windows Installer

1- Após verificar que a aplicação esta rodando sem problemas vamos gerar o pacote de instalação.

a- Abra o Solution Explorer e clique com o botão direito do mouse sobre o nome do projeto

b- Selecione a opção Add do menu

c- a seguir clicando na opção New Project...

4- Na janela Add New Project selecione o tipo de projeto - Setup and Deployment Projects

a- a seguir clique em Setup Project

b- Altere o nome do projeto para TreeView1

c- Altere também a localização(Location) para o local onde deseja salvar o pacote.

d- Clique em OK e projeto Treeview1 será incluído ao seu projeto já existente.

Dica- Se você alterar a localização para a mesma usada pelo projeto da aplicação principal todo o projeto e arquivos de Setup serão criados sob a pasta do projeto principal

Vamos agora configura as opções de construção(build) da solução , senão toda vez que a sua aplicação for executada a partir do IDE , tanto o fonte como o projeto de setup serão construídos e isto pode consumir algum tempo extra indesejável. Para mudar este comportamento faça o seguinte:

- Pronto ! , agora o arquivo de setup não será criado automaticamente . Para construí-lo manualmente clique com o botão direito do mouse no projeto de setup e escolha build.

Definindo os Designers para o seu projeto de Setup

Ao criar um projeto de Setup o VB.NET oferece várias opções de designers,  cada um pode ser usado para configurar um aspecto do nosso programa de setup, Para ver todos os descritores (traduzi assim a palavra designers ) que você pode usar clique com o botão direito do mouse no item solution no Solution Explorer (do projeto de Setup) e selecione a opção View: (temos abaixo a figura da janela obtida)

  1. File System - Permite copiar arquivos para o computador de destino. Você pode usar um diretório pré-definido ,  ou ma das muitas das opções reconhecidas.
  2. Registry - Permite incluir novas chaves e valores para o registro do computador de destino
  3. File Types - Permite registrar uma extensão de documento com sua aplicação (de forma que um duplo clique no documento inicie o programa de imediato).
  4. User Interface - Permite ajustar a interface padrão ou usar a sua personalização.
  5. Custom Actions - Permite links com outro programas , que irão iniciar quando o setup terminar para realizar uma configuração adicional.
  6. Launch Conditions - Permite definir condições especiais que devem ser encontradas a fim do setup funcionar.

Além disto você pode definir algumas opções básicas da janela Project|Properties (propriedades do projeto) como :

Incluindo arquivos e atalhos

Uma das etapas mais importantes na criação de um projeto de setup é definir quais arquivos você quer copiar para o computador de destino. Usando o descritor File System você pode definir quais arquivos serão incluídos para uma pasta reconhecida do sistema, uma pasta para fontes, a GAC ou mesmo a sua pasta Meus Documentos.

Pode também incluir arquivos em um caminho absoluto ou para um diretório que o usuário escolher para a aplicação.  A lista de pastas suportadas é a seguinte :

A janela File System contém dois painéis; na esquerda a lista de pastas e na direita a lista de arquivos para a pasta selecionada.

 

Além disto , como você pode ver na figura da esquerda, temos a opção de incluir uma pasta especial. Basta clicar com o botão direito do mouse no painel da esquerda e escolher a opção.

Arquivos de suporte

Você pode incluir manualmente arquivos que sua aplicação vai usar (bitmaps , arquivos de dados ,etc..). Basta clicar na lista de arquivos com o botão direito do mouse e escolher Add File.

Você pode incluir também projetos de saida como o .NET assembly na sua aplicação. Isto assegura que o arquivo será automaticamente regenerado a cada vez que você construir o setup. Para incluir um projeto de saida clique com o botão direito do mouse em Application Folder e escolha Project Output.
- Primary Output inclui o construtor assembly para o projeto referenciado e qualquer assemblies dependente.

- Esta é a opção mais comum , mas você pode também definir a opção Configuration para Release .NET para assegurar que o programa Setup sempre irá usar a versão release do assembly.

- Localized Resources - utiliza o satelite assemblies para o projeto que contém recursos locais específicos

- Source Files - inclui todos os arquivos de textos para o projeto.

Qualquer outra assemblies dependente é referenciada de forma automática. Neste caso , a assembly dependente ( mscorlib,cfgmscorlig.dll) é incluida.

Ao incluir um .NET Assembly , os arquivos da .NET framework será automaticamente incluída no setup, permitindo a você instalar sua aplicação em computadores que não possuem na plataforma o runtime do .NET. (Isto vai aumentar o tamanho do seu arquivo final entre 100 K a 15 Mb)

Se o seu cliente já possui a plataforma .NET instalada exclua estes componentes para economizar espaço.(veja figura acima)

Para incluir atalhos no seu projeto de Setup fazemos assim :

  1. Inclua um atalho para o seu projeto de setup em um dos folders do File System:

Para incluir um icone faça o seguinte:

  1. Na janela Solution Explorer, selecione o seu projeto de Setup (no meu caso o projeto TreeView)
  2. Na janela de propriedades (Properties window) selecione a propriedade AddRemoveProgramsIcon e escolha (Browse…)  . A janela Icon será exibida:
  3. Na janela clique em  Browse.... A janela - Select item in project - será mostrada.
  4. Nesta janela selecione a pasta e o arquivo de ícone que deseja atribuir a seu projeto.
  1. Crie uma pasta para aplicação no menu Programs ( vou chamá-la : TreeView)
  2. Clique com o botão direito do mouse sobre a pasta e selecione a opção - Create New ShortCut
  3. Após escolher o destino o seu atalho será criado. Você pode alterar seu nome , e configurar opções adicionais usando a janela de propriedades.

A esta altura você já pode construir o seu projeto de Setup e gerar o arquivo .msi usando-o para instalar a aplicação Setup. Mas vamos continuar ...

Personalizando a interface com usuário

No descritor - User Interface - podemos visualizar as janelas que o usuário irá ver. As janelas estão exibidas na ordem na qual serão apresentadas,  e estão agrupadas por estágio de setup.

Você poderá ver duas versões listadas , uma para uma instalação de usuário padrão e outra para uma instalação administrativa. (conforme figura)

Para acessar a instalação administrativa use o parâmetro /a. (geralmente esta opção e fornecida par uma instalação em rede).

Para ver as propriedades de cada item clique sobre o item e veja a janela de propriedades.(conforme figura)

Não tem jeito de você visualizar os itens a não ser executando o setup.

Você pode dar uma personalizada nesta interface...

 

A janela - Customer Information - tem uma propriedade interessante ; a propriedade SerialNumberTemplate pode ser customizada para não permitir que um usuário instala sua aplicação sem número serial válido.

O modelo também determina como o número serial será formatado. Mas você não pode fazer a validação deste número diretamente, mas terá que usar as rotinas embutidas no produto Windows Installer que irá fazer a validação.

Funciona assim :

No modelo SerialNumberTemplate você pode usar os seguintes caracteres:

  • # requer um digito (não realiza validação adicional)
  • ? requer um caracter alfanumérico usado pelo algoritmo de validação.
  • ^ requer um caracter em caixa alta
  • % requer um digito que será usado pelo algorítmo de validação.

Qualquer outro caractere é tratado como um literal. O algorítmo de validação esta embutido no serviço do Windows Installer. Ele soma todos os dígitos e divide por 7. Se o resto for igual a zero a validação esta ok senão será inválida.

Por exemplo : se usarmos o modelo <%%M-##-##> teremos três caixa de texto ; os quatro últimos caracteres devem ser dígitos ; o terceiro caractere deve ser a letra M e a soma dos primeiros dois dígitos deve ser divisível por 7. (um código válido seria : (77M-00-00)

Nota: Lembre-se que somente os caracteres: % , ? requerem validação.

 

Para exibir a caixa de validação você deve definir a propriedade ShowSerialNumber igual True. Abaixo um exemplo para o caso estudado mostrando uma validação com sucesso e uma validação incorreta.

Para terminar vou falar do descritor Registry . Nele podemos incluir entradas no registro do sistema. Podemos localizar um nó no registro e incluir chaves e valores com um click de mouse.

Para o caso estudado eu vou incluir no registro o nome da empresa e o nome do usuário que instalou o sistema .

As variáveis usadas neste caso são identificadas por estarem envolvidas por colchetes. Em tempo de execução o Setup irá substituir as variáveis [Manufacturer] e [ProdutcName] e [CustomerName] e irá criar uma entrada no registro do Windows

Como você notou o processo de geração de Setup ficou mais profissional permitindo uma personalização em muitas de suas etapas. O assunto não foi esgotado , pelo contrário , mostrei somente a ponta do iceberg. Com certeza voltarei a este assunto em futuros artigos...

Até lá...


José Carlos Macoratti