segunda-feira, 13 de maio de 2013

Gerando instalador pelo Visual Studio

Introdução


Vamos aprender nesse tutorial como gerar um instalador básico pelo próprio Visual Studio. Alguns programadores desconhecem essa possibilidade e acabam procurando outros programas para executar essa tarefa. Para quem usa o Visual Studio para programar, então, talvez não há a necessidade de procurar outro programa apenas parar gerar o instalador. Vamos lá.

Aprendendo


  • Antes de tudo, é necessário que sua aplicação esteja pronta. Então agora, basta criar um novo projeto. Então clique com o botão direito em Solution Explores e adicione um novo projeto. Ou entre no menu arquivo (File) e crie um novo projeto: 



  • Selecione ->Other Project Types –> Setup and Deployment –> Visual Studio Installer –> Setup Project




  • Abra a janela de propriedades. ( View->Other Windows -> Properties Window), e depois clique em cima projeto. Aparecerá na janela vários valores que podem ser configurados. Preencha todos os valores se possível.


AddRemoveProgramsIcon: Adiciona um Ícone no seu pacote de instalação

Author: informe o autor do projeto no caso você

Description: informe uma breve descrição do sistema

InstallAllUsers: Ser for True instala para todos os usuários da máquina

Localization: Mude para portuguese(Brazil), que a aplicação ficará em português

Manufacturer: informe a empresa que desenvolveu

ManufactureUrl: informeo site da empresa que desenvolveu

ProductCode: é o identificador da aplicação após a instalação. Esta propriedade pode ser usada para detectar se a aplicação já está instalada. E também usada para desinstalar a aplicação.

ProductName: é utilizada por algumas telas durante a instalação e pode ser utilizada como variável para definir por exemplo a pasta de destino da aplicação após a instalação.
    Target Plataform: x86 para maquinas convencionais e x64 para plataforma 64bits. Essa informação precisa ser preenchida de acordo com o executável gerado de nossa aplicação.

    • Agora, precisamos adicionar todos os arquivos necessários para nosso programa funcionar de acordo com a hierarquia das pastas para que o executável consiga encontrar os recursos. Para fazer isso, clique com o botão direito do mouse em cima do projeto->view->File System



    • O File System já três pastas como padrão: Application Folder, User's Desktop e User's Programs Menu.












    • Em Application Folder é onde será colocado as pastas que contem os arquivos de nossa aplicação. É sempre bom deixar a janela de propriedades visível para saber o que é possível configurar. A propriedade Default Location por exemplo é onde o programa será instalado. Geralmente fica no arquivos de programa.
    • Em User's Desktop será colocado o atalho que vai para a área de trabalho
    • Em User's Programs Menu, é como nosso programa será mostrado no menu iniciar.


    Application Folder


    • Criando pastas em Application Folder: Clique com o botão contrário do mouse em cima de Application Folder -> Add -> Folder.
    • Podemos criar outra pasta dentro da pasta criada ou podemos criar arquivos.
    • Para criar arquivos: Clique com o botão direito do mouse em cima pasta desejada depois em Add e depois em File. 




    Outra forma muita mais prática de adicionar arquivos a pasta desejada é indo pela própria pasta no windows explorer e arrastar todos os arquivos de uma vez para dentro da pasta de destino contida na janela do Visual Studio.

    User's Desktop



    • Criando atalho: botão direito em User's Desktop depois clique em Create Shortcut to ... . Agora nomeei o atalho e informe o arquivo executável da aplicação configurando o campo Target na janela de propriedades.


    User's Program Menu



    • Para adicionar pastas: Botão direito -> Add -> Folder
    • Para adicionar atalhos: Botão direito - > Create Shortcut to   e configure o campo Target.



    Finalização


    Agora basta clicar em build que o instalador será gerado. Mas antes de finalizar o instalador é aconselhável criar um desinstalador para o usuário não precisar entrar em Adicionar e Remover Programas apenas para desinstalar sua aplicação.


    Desinstalador


    Para criar um atalho para o desinstalador, precisamos seguir os seguintes passos.


    • Entramos em File System e clicamos com o botão direito em File System on Target Machine -> Add Special Folder -> System Folder





    • Agora clique botão direito em cima de System Folder e adicionar arquivo. Procure o arquivo msiexec.exe dentro da pasta Windows/System32/msiexec.exe e confirme a operação.
    • Clique no arquivo adicionado e configure suas propriedades na janela de propriedades.


    Condition = Not Installed
    Exclude = False
    Hidden = False
    Permanent = True
    ReadOnly = False
    SharedLegacyFile = False
    System = True
    Transitive = True
    Vital = false


    • Agora precisamos criar o atalho para o desinstalador no menu Iniciar. Para isso, siga os passos anteriores de como criar um atalho no Menu Iniciar. Após criado o atalho, clique nele e configure as propriedades para

    Arguments = /x [ProductCode]
    Target = informe o arquivo msiexec.exe da pasta system folder que acabamos de criar.



    • O argumento passado para Arguments é o padrão para esse executável. Assim informamos que queremos desinstalar do windows o programa com o ProductCode correspondente. Poderíamos passar o ProductCode na mão como por exemplo: /x {C9088BE1-C4B3-4B93-9D45-F570365C5F3A}. Mas não teria sentido ter que ficar mudando toda hora que formos fazer um novo instalador.


    Agora basta compilar Novamente.


    Possíveis Bugs no Desinstalador


    Alguns computadores com Windows 7 estão tendo problemas com o desinstalador criado pelo visual studio por causa de um arquivo de sistema chamado Desktop.ini localizado na área de trabalho pública.

    Esse arquivo precisa ser alterado, só que ele está somente como leitura. Então precisamos alterá-lo para escrita e leitura antes de chamarmos o desinstalador. Para conseguirmos essa proeza, precisamos criar uma ação customizada no projeto. Criamos da seguinte forma:

    •  Criar novo Projeto -> Visual C# -> Class Library


    • Removemos Class.cs que foi criado e adicionamos um novo tipo de arquivo chamado Installer Class. Agora precisamos sobrescrever alguns métodos. Clique com o botão direito em cima de Installer1.cs e em seguida clique em View code.


    • O código mostrado será esse:
    using System; 
    using System.Collections; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Configuration.Install; 
    using System.Linq; 

    namespace CustomAction2 

      [RunInstaller(true)] 
      public partial class Installer1 : System.Configuration.Install.Installer 
      { 
        public Installer1() 
        { 
           InitializeComponent(); 
        } 

      } 


    Então mudaremos o código para:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Configuration.Install;
    using System.Linq;
    using System.Windows.Forms;


    namespace CustomAction2
    { [RunInstaller(true)]
      public partial class Installer1 : System.Configuration.Install.Installer
      {
         public Installer1()
         {
            InitializeComponent();
         }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
         public override void Install(IDictionary stateSaver)
         {
            base.Install(stateSaver);
         }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
         public override void Commit(IDictionary savedState)
         {
            base.Commit(savedState);
         }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
         public override void Rollback(IDictionary savedState)
         {
            base.Rollback(savedState);
         }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
         public override void Uninstall(IDictionary savedState)
         {
             string deskDirectory =      Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory);
             string pathComplete = deskDirectory + "/desktop.ini";

             if (System.IO.File.Exists(pathComplete))
             {
                System.IO.FileAttributes attributes =     System.IO.File.GetAttributes(pathComplete);

                if ((attributes & System.IO.FileAttributes.ReadOnly) == System.IO.FileAttributes.ReadOnly)
                {
                   attributes = RemoveAttribute(attributes, System.IO.FileAttributes.ReadOnly);
                   System.IO.File.SetAttributes(pathComplete, attributes);
                }
             }

             base.Uninstall(savedState);
         }

         private static System.IO.FileAttributes RemoveAttribute(System.IO.FileAttributes attributes, System.IO.FileAttributes attributesToRemove)
         {
             return attributes & ~attributesToRemove;
         }
       }
    }



    FIM

    10 comentários:

    1. Que legal cara, agora você mudou de ramo! rsrsr =))

      ResponderExcluir
    2. Cara, como gero um pacote de instalação de projetos no Visual Studio 2013?

      ResponderExcluir
      Respostas
      1. Wagner, na verdade tem tempo que não vejo o blog e desde essa época que não gero instalador no Visual Studio. Não sei o que pode ter mudado com a versão 2013.

        Excluir
      2. Procure por
        Microsoft Visual Studio 2013 Installer Projects

        Excluir
    3. Respostas
      1. Sério? Achei que nem estava funcionando mais esse tutorial. :)

        Excluir
    4. Eu to fazendo tudo certop mais na hora de escolhewr o executavel em target só aparece a pasta... tem como ajudar???

      ResponderExcluir
      Respostas
      1. Tem muito tempo que não faço isso. Fiz esse tutorial justamente para não perder o conhecimento.

        Excluir
    5. Muito bom, obrigado, me ajudou bastante.

      ResponderExcluir