25 01 2017
Criando um instalador com o Visual Studio 2015
Uns tempos atrás eu escrevi um artigo mostrando rapidamente como criar instaladores para aplicativos .NET. Nesse artigo eu mostrei três ferramentas que podemos utilizar para gerar instaladores das nossas aplicações: Installer Projects do Visual Studio, InnoSetup e InstallShield. Como esse é um dos artigos mais acessados aqui no meu site, eu resolvi me aprofundar um pouco em cada uma dessas ferramentas. Confira no vídeo abaixo a criação de um instalador no Visual Studio 2015 utilizando os Installer Projects:
Adicionando os Installer Projects no Visual Studio 2015
Como mencionei no vídeo, se você não conseguir encontrar os projetos de instalação no Visual Studio 2015, não se preocupe, isso é completamente normal. Até o Visual Studio 2012, os projetos de instalador eram adicionados automaticamente durante a configuração do Visual Studio. Porém, a partir do Visual Studio 2013 nós temos que baixar uma extensão a parte para instalá-los.
Você pode baixar os Installer Projects para Visual Studio 2013 aqui e para o Visual Studio 2015 aqui. Outra opção é abrir a tela de “Extensions and Updates” diretamente no Visual Studio (menu “Tools“), clicar em “Online” e procurar por “Installer“.
Baixe o projeto de exemplo
Para baixar o projeto de exemplo desse artigo, assine a minha newsletter. Ao fazer isso, além de ter acesso ao projeto, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas “bônus” que eu só compartilho por e-mail. Inscreva-se utilizando o formulário no final do artigo.
Até a próxima!
André Lima
Photo by Peter Shanks used under Creative Commons
https://pixabay.com/en/startup-start-up-notebooks-creative-593327/
Song Rocket Power Kevin MacLeod (incompetech.com)
Licensed under Creative Commons: By Attribution 3.0 License
http://creativecommons.org/licenses/by/3.0/
Exibindo vídeos do Vimeo e Youtube no Windows Forms e WPF Passando um DataSet não tipado para o Report Viewer
[…] Para mais informações sobre esse vídeo (inclusive para baixar o projeto de exemplo), clique neste link. […]
Muito boa a aula, gostei!
Só alguns detalhes que eu queria saber como fazer, como por exemplo, mudar o idioma da tela do instalador e colocar uma LOGO na tela de instalação e alterar o ícone do arquivo de instalação.
Porque ele gera dois arquivos? setup e install? Não poderia ser apenas um?
Olá Sames, muito obrigado! Fico feliz que você tenha gostado do vídeo.. :)
Quanto às suas questões.. Para alterar o idioma, você precisa configurar a propriedade “Localization” do projeto do instalador.. Já para colocar um logotipo no instalador, você pode seguir as instruções apresentadas nesta thread do StackOverflow.. E quanto ao ícone, você pode especificar um ícone customizado que vai ser mostrado na janela de adicionar e remover programas, através de propriedade “AddRemoveProgramsIcon” do instaldor..
Por fim: por que gera dois arquivos? Um arquivo é o instalador somente do seu aplicativo (arquivo com extensão .msi) e o outro é o instalador “geral” (arquivo setup.exe), que vai conferir se todas as dependências estão instaladas, etc.. Ao distribuir o aplicativo, você precisa dos dois arquivos e você tem que executar o arquivo setup.exe para rodar o instalador..
Abraço!
André Lima
Olá André, como eu faço para que quando eu atualizar o sistema com uma nova versão e execute o instalador desta nova versão o instalador desistale a versão já instalada automaticamente e instale a nova eu vi essa função no FileZila FTP é excelente você solta uma instalação é o próprio cliente já instala sem precisar desintalar e como a maioria não sabe então isso ajudaria. OBRIGADO abraço.
Olá André!
Nesse caso você precisa trabalhar com a propriedade “RemovePreviousVersions” do instalador (documentação aqui).. Você também não pode esquecer de mudar o atributo “Version” no instalador e a versão dos assemblies da sua aplicação.. Dessa forma ele gerará um novo “ProductCode”, que fará com que o instalador entenda que uma nova versão do mesmo aplicativo está sendo instalada..
Abraço!
André Lima
Obrigado André deu certo aqui.
André boa tarde outra pergunta…rs quanto eu gero o instalador gera 2 arquivos de SETUP e tanto um quanto o outro executa normal, qual a razão de gerar 2 arquivos iguais? Obrigado.
Olá André, desculpa a demora, é que o seu comentário tinha caído no spam aqui..
Eu falei sobre o motivo da geração de dois arquivos pelo setup em um comentário logo aqui em cima (resposta do comentário do Sames Davis).. Dá uma olhada lá e veja se você ficou claro pra você..
Abraço!
André Lima
Ótima Literatura, adquirir o Ebook – Aprendendo Report Viewer – do design à implantação, Recomendo a todos que assim como eu necessite de literatura passo a passo, que seja ELUCITATIVA! Ándré está de parabéns pela obra, espero que lance mais!
Olá Eduardo!
Muito obrigado! Fico feliz que você tenha aproveitado o conteúdo do e-book! Qualquer dúvida, é só entrar em contato.. :)
Abraço!
André Lima
Olá André bom dia!
Como sempre trazendo material de qualidade para nosso aprendizado. Excelente artigo! Agora eu gostaria de tirar uma pequena dúvida. Eu tenho uma fonte .TTF que não encontramos em determinado sistema operacional. Qual seria a ideia para fazer a instalação dessa fonte? Eu vi que em sua explicação eu poderia utiliza o Custom Actions para rodar um programa e fazer alguma rotina referente ao meu software. A ideia seria essa mesmo ou teria outra maneira para fazer a instalação dessa fonte?
Obrigado mais uma vez por seus excelentes artigos publicados. Estou sempre acompanhando seu trabalho. Muito bom! Sempre tenho recomendado a alguns amigos
Olá Frederico, muito obrigado! Fico feliz que os artigos estejam te ajudando.. :)
Quanto à instalação da fonte pelo instalador, veja se este artigo te ajuda em algo:
Installing and removing fonts using C#
Abraço!
André Lima
Olá André, era justamente isso que eu estava precisando. Está para existir alguém igual a você. Tiro certeiro. kkkkk
Muito obrigado mais uma vez pela disposição em ajudar.
Opa Frederico, muito obrigado! Que bom que era isso mesmo que você estava precisando.. :)
Qualquer outra dúvida é só entrar em contato..
Abraço!
André Lima
André acabei esquecendo de perguntar uma outra coisa. Na minha aplicação eu estou utilizando o .NET Framework 4.6.1 e o SQL Local DB. Gostaria de saber se na instalação não for detectado os recursos mencionados acima, se eu poderia fazer a instalação off-line e sozinha sem a “intervenção” do usuário. É possível fazer isso em segundo plano? Obrigado e desculpas por não ter colocado a informação completa.
Olá novamente, Frederico! Sem problema, vamos lá..
Na parte de requisitos do projeto de instalação você pode selecionar esses pré-requisitos para serem instalados automaticamente.. Porém, acredito que a instalação não será “off-line”, o usuário terá que aceitar os termos, etc, etc.. Só fazendo um teste em uma máquina limpa mesmo para ver o comportamento exato..
Se realmente for necessária uma instalação sem intervenção, eu tentaria fazer manualmente com custom actions rodando um .bat que chame os instaladores necessários passando o parâmetro para instalação “quiet”..
Abraço!
André Lima
Olá André estou eu aqui novamente para tirar mais uma dúvida.
Eu utilizo o IntelliLock para fazer a segurança e licenciamento dos programas que venho desenvolvendo. Só que tem um porém, quando eu utilizo esse software, ele faz uma compilação e “protege” contra uma possível pirataria.
Onde está o meu problema. Quando vou fazer um instalador com o Visual Studio, quando pego o projeto de saída, ele nunca pega o arquivo executável que foi compilado pelo programa que utilizo.
Poderia safar mais essa onça por favor? Já procurei na internet e ainda não achei nada. Poderia me ajudar por favor?
Obrigado desde já.
André,
Consegui resolver o meu problema. Depois de analisar bem cheguei a seguinte solução:
1 – Copiei o arquivo que o IntelliLock compila e coloquei na pasta do meu projeto onde está localizado o Primary output from Gerador XML (Active)
2 – Na janela Configuration Manager desmarquei a opção Build do meu projeto para que ele não sobreposse o meu arquivo compilado pelo programa IntelliLock.
3 – Compilei somente o meu projeto Setup e funcionou normalmente.
Peço desculpas por ter colocado a informação acima. Como resolvi o problema achei apropriado colocar também a resolução do problema. Peço desculpas por que eu acho que não fui muito claro.
Mesmo assim um grande abraço e obrigado por suas colaborações.
Olá Frederico!
Que bom que você conseguiu resolver o problema.. Eu não tinha ideia do que poderia ser feito nessa situação, mas, felizmente você conseguiu solucionar.. :)
E não tem problema nenhum que você colocou as informações acima.. Muito pelo contrário, eu agradeço por você ter voltado aqui e compartilhado com a gente a solução que você encontrou.. Dessa forma, se mais alguém tiver essa mesma dificuldade no futuro, as suas instruções vão ajudar sem dúvida alguma..
Um forte abraço!
André Lima
Obrigado, ajudou bastante!
Valeu Alberto! Fico feliz por ter conseguido ajudar.. Abraço!
Olá André!
Achei o teu tutorial muito interessante e já me ajudou bastante, mas tenho uma dúvida que gostava que me ajudasse.
Como posso eu adicionar um ficheiro .exe ao meu Setup Project de maneira a que seja executado antes ou depois do deployment?
Obrigado, Abraço!
Olá Ricardo, muito obrigado pelo comentário!
Antes da instalação vai ser difícil você conseguir executar qualquer coisa.. Pelo que pesquisei, tem até umas gambiarras que você pode fazer, mas são bem complicadas.. Se você realmente precisar que seja executado antes da instalação, aí recomendo que você parta para alguma outra solução de instalador (como o InnoSetup)..
Se for depois da instalação, aí você pode trabalhar com custom actions.. Tem um passo a passo nesta thread do StackOverflow, veja só:
How to run a “.bat” file during installation?
Abraço!
André Lima
Muito Obrigado pela sua resposta tão rápido!
Não necessita de ser antes da instalação…
Deste modo adicionei o meu executável (dotnet sdk.exe ) na pasta commit das custom actions, o que acontece é que quando começa a instalar o Dotnet dá um erro (0x80070652 já existe outra instalação em curso) pois ele não dá como concluida a primeira. Como consigo resolver este problema?
Obrigado,
Ricardo Santos
Olá Ricardo!
O que é exatamente que você está querendo instalar? O .NET Framework? Se for, nesse caso você só precisa adicioná-lo como pré-requisito do instalador.. Aí ele controlará se a versão especificada do .NET está instalada antes mesmo de prosseguir com a instalação do seu aplicativo..
Se for algum outro instalador baseado na tecnologia MSI, aí você terá problema mesmo, porque não é possível fazer duas instalações ao mesmo tempo.. E mesmo que você coloque como custom action depois da instalação, teoricamente a primeira instalação ainda não terá sido concluída, aí você não conseguirá iniciar a segunda instalação..
Nesse caso, normalmente você consegue encontrar os chamados “Merge Modules” dos componentes, que podem ser adicionados ao instalador da aplicação.. Ou você pode também distribuir os componentes manualmente na pasta do seu aplicativo..
Mas, tudo isso depende do que exatamente você está tentando instalar junto com a aplicação..
Abraço!
André Lima
Olá André:
Desenvolvi em VB.NET uma aplicação e já usei o Instalador com sucesso. Graças a sua clara explicação.
Só que surgiu uma dúvida em relação a um post feito pelo Andre Luis Spilari em 11/02/2017: ele pergunta sobre desinstalar a versão instalada automaticamente sem a intervenção do usuário. Você respondeu que é só configurar o “RemovePreviousVersions” do instalador e depois mudar o atributo “Version” também.
Desculpe, mas não consegui encontrar o local onde faço essas configurações. Adianto que é a primeira vez que uso esse recurso, então, desculpe se a pergunta está sendo tão óbvia…
Olá André:
Desculpa mesmo… me confundi e já achei onde faço a configuração que comentei. Desconsidere o meu post anterior, ok?
Abraços!
Olá Demiraldo! Que bom que você conseguiu encontrar a opção que estava procurando.. Se ficar com alguma outra dúvida, é só entrar em contato.. :)
Abraço!
André Lima
Cara, muito bom seu artigo. Mas eu tentei criar um installer, e durante a buid do instalador abre o instalador e pede para encontrar o arquivo vs_setup.msi do “Microsoft Visual Studio 2010 Shell (Integrated)”. não acho isso de jeito nenhum e não consigo continuar, trava o VS e fica na tela de cancelando a instalação.
Olá Jefferson!
Estranho hein.. Qual versão do Visual Studio você está utilizando? E você tem outras versões do Visual Studio instaladas no mesmo computador?
Abraço!
André Lima
Caro André, parabéns pela contribuição do video. Estou testando esse instalador na versão do Visual Studio Professional 2017 e notei na parte dos pré-requisitos que não tenho mais os pacotes distribuíveis como você tem do .NET 4.0 e Windows Installer 3.5 que dependo na minha aplicação. Dei uma pesquisada e não encontrei como adicionar elas. Tem alguma dica? Obrigado.
Olá Ricardo, muito obrigado pelo comentário!
Quais pré-requisitos estão disponíveis para você? Não tem nenhum .NET Framework (uma versão maior, como a 4.5) disponível para selecionar?
Para adicionar pacotes de pré-requisito você precisa baixá-los e colocá-los em uma pasta específica.. Você encontra mais detalhes nesta thread do StackOverflow (nesse caso o .NET 4.7 estava faltando):
Visual Studio 2017 Project Installer missing .NET 4.7 option
Abraço!
André Lima
Caro André, eu pesquisei sobre isso e o problema é que não existe esse “Developer Pack” do Microsoft .NET 4.0 para o Visual Studio 2017. Vide https://www.microsoft.com/net/download/visual-studio-sdks . Como ainda tenho estações Windows XP que não suportam framework´s mais recentes estou meio amarrado. Obrigado.
Olá Ricardo!
Acho que encontrei um passo a passo para trazer o suporte ao .NET 4.0 nos pré-requisitos do Visual Studio 2017, veja só se funciona para você:
Missing .NET Framework 4.0 in Visual Studio 2017 Prerequisites when publishing
Abraço!
André Lima
Andre,
ótimo video, parabéns.
Tenho um problema, estou tentando gerar um instalador e em resumo tudo acontece normalmente porem o atalho criado na desktop não está funcionando. Analisando as propriedades do atalho, o atalho aponta para a pasta da aplicação mas não para o exe do meu aplicativo. O que eu preciso fazer para que meu atalho aponte para o exe?
Obrigado.
Olá Paulo!
Como é que você criou o atalho dentro do instalador? Você precisa clicar com o botão direito, selecionar a opção de criar atalho e apontar para o “primary output” do projeto.. Assim o atalho será criado apontando para o EXE..
Caso você não tenha entendido, posta um screenshot da parte de atalhos do seu instalador para eu dar uma olhada como você está fazendo..
Abraço!
André Lima
Ola andré,
Obrigado por responder meu post.
Poderia conferir os screenshots no link abaixo:
https://drive.google.com/open?id=1iamP38gT0gFGncK9BzQpguKtQPSB6-Im
obrigado
Olá Paulo!
Obrigado por enviar as screenshots.. Pois bem, aparentemente você não criou o atalho da maneira correta.. Tente excluir essa entrada de atalho do seu instalador e cria uma outra novamente seguindo os passos:
1) Clique com o botão direito na área à direita da seção “User’s Desktop”
2) Escolha a opção “Create New Shortcut”
3) Na janela “Select Item in Project”, escolha “Application Folder” no combobox “Look in” e selecione “Primary output from XXXXX” (onde XXXXX é o nome da aplicação)
4) Clique em OK
Depois volta aqui e conta pra gente se funcionou..
Abraço!
André Lima
André, poderia me ajudar com uma dúvida?
Como eu faço para que depois de instalado, o executável seja chamado “sozinho” e já rode sem que o usuário tenha que fazer isso?
Olá Suzana!
Você já deu uma olhada nas instruções apresentadas nesta thread do StackOverflow?
Visual Studio Installer > How To Launch App at End of Installer
Depois me avisa se deu certo..
Abraço!
André Lima