André Alves de Lima

Talking about Software Development and more…

Criando instaladores para aplicativos .NET

Você passa meses finalizando seu aplicativo Windows Forms ou WPF desenvolvido com o Visual Studio e chega na hora de instalá-lo no computador cliente, o que você faz? Você precisa criar um instalador! No artigo dessa semana eu vou abordar algumas maneiras de criar instaladores para aplicativos .NET.

Até o Visual Studio 2010, a Microsoft disponibilizava diretamente no produto um tipo de projeto chamado “Install project“. Esse tipo de projeto permitia que o desenvolvedor adicionasse um instalador à solução, de maneira muito simples e intuitiva. Porém, por algum motivo que ninguém sabe (provavelmente cortes no orçamento, na minha opinião), a Microsoft decidiu remover esse projeto no Visual Studio 2012. Quando o Visual Studio 2013 foi lançado, a Microsoft decidiu amenizar o problema e lançou uma extensão que adiciona novamente a possibilidade de trabalhar com “Install projects“.

Confira nas próximas seções desse artigo as três principais maneiras de criarmos instaladores para aplicativos desenvolvidos com o Visual Studio: “Install project” com a extensão para o Visual Studio 2013, InnoSetup e InstallShield Limited Edition (ISLE). Além dessas opções, poderíamos também utilizar uma ferramenta chamada “WIX“, mas, devido à sua alta complexidade, não vou abordá-lo nesse artigo.

Preparando a aplicação a ser instalada

Antes de criarmos o instalador, precisamos preparar a aplicação a ser instalada. Para facilitar a nossa vida, vou utilizar a aplicação que construímos no artigo de três semanas atrás, onde aprendemos como tirar fotos com a webcam em C#. Esse exemplo cabe como uma luva nessa situação, uma vez que ele contém não somente um executável, mas sim, uma biblioteca externa (AForge.NET). Caso você queira poupar um pouco de tempo, baixe o projeto desse aplicativo aqui.

Opção 1: Extensão do Install Project para o Visual Studio 2013

Como eu mencionei anteriormente, desde as versões mais antigas do Visual Studio a Microsoft disponibilizava um tipo de projeto chamado “Install project“. Esse tipo de projeto esteve presente nativamente no Visual Studio até a versão 2010. Porém, no Visual Studio 2012 a Microsoft resolveu removê-lo e só suportar nativamente o “InstallShield Limited Edition“. Depois de ouvir muitas críticas da comunidade, a Microsoft resolveu disponibilizar novamente esse tipo de projeto no Visual Studio 2013, mas, dessa vez, como uma extensão.

Para fazer uso do “Install project” no Visual Studio 2013, baixe e instale a extensão “Microsoft Visual Studio Installer Projects“. Feito isso, você terá novamente disponível no Visual Studio o tipo de projeto de instalador existente até o Visual Studio 2010:

Para quem está acostumado com esse tipo de projeto, ele é idêntico ao que estava disponível no Visual Studio 2010. Já para as pessoas que não conhecem, vamos fazer um tour rápido e aprender como criar um projeto básico de instalador para a nossa aplicação.

Ao escolher o tipo de projeto “Setup Wizard“, o Visual Studio exibirá um Wizard com cinco etapas. A primeira etapa é só uma tela de “bem-vindo ao Wizard“. Já na segunda tela (“Choose a project type“), escolha a opção “Create a setup for a Windows application“, que é justamente o que queremos fazer:

Na terceira etapa (“Choose output projects to include“), escolha a opção “Primary output from ExemploWebcam“. Essa opção fará com que o executável e todas as bibliotecas dependentes sejam incluídas no instalador. Muito prático, uma vez que não precisamos ficar pensando quais dlls externas devemos incluir no instalador.

Nos passos quatro e cinco, podemos deixar as opções padrão e finalizar o Wizard. Caso você adicione mais bibliotecas externas ao projeto, você pode atualizar o instalador clicando com o botão direito em “Detected Dependencies” e escolhendo a opção “Refresh Dependencies“:

Se após esses procedimentos você fizer um build desse projeto, o instalador será gerado na pasta “bin/debug” (ou “bin/release“, dependendo da configuração que estiver ativa):

Ao instalar o aplicativo, você perceberá que ele será instalado dentro da pasta “Arquivos de Programas“, logo abaixo de uma pasta chamada “Default Company Name“. Além disso, por padrão, nenhum atalho será criado no menu iniciar.

Para configurar o nome da empresa que será considerado no instalador, clique no projeto do instalador e aperte a tecla “F4” (para ir até a página de propriedades). Lá você consegue configurar o nome do autor, “manufacturer“, entre outras propriedades:

Já para adicionar um item no menu iniciar, você precisa clicar com o botão direito em “User’s Program Menu” e escolher a opção “Project Output“:

Você pode também clicar com o botão direito em “File System or Target Machine” para conferir as diversas outras opções de pastas que podemos utilizar:

E com isso temos um projeto de instalador criado com a extensão do “Install project” para o Visual Studio 2013, desenvolvida pela própria Microsoft.

Edit: em janeiro de 2017 eu publiquei um vídeo no meu canal do Youtube mostrando mais detalhes sobre os projetos de instalação no Visual Studio 2015. Aqui vai o vídeo:

Para mais informações sobre esse vídeo (inclusive para baixar o projeto de exemplo), clique neste link.

Opção 2: InnoSetup

O InnoSetup é um software gratuito que nos permite gerar instaladores para qualquer tipo de aplicativo, incluindo os desenvolvidos com o Visual Studio. Você pode baixa-lo na página de downloads do site oficial do InnoSetup. Uma vez baixado e instalado, nós podemos começar a criar o instalador para a nossa aplicação.

Abra o “InnoSetup Compiler” e escolha a opção “Create a new script file using the Script Wizard“:

O Wizard de criação de instaladores do InnoSetup é muito simples. A maioria dos passos é bem intuitivo e com certeza você conseguirá configurá-lo da maneira correta. Para poupar um pouco de espaço, não vou colocar screenshots de todo o processo, mas sim, apenas dos passos mais importantes.

O primeiro passo do Wizard, chamado “Application Information“, diz respeito às informações básicas do aplicativo a ser instalado. Nesse passo você consegue definir o nome, a versão, o autor e website do aplicativo.

No próximo passo, chamado “Application Folder“, você pode selecionar se o seu aplicativo deverá ser instalado na pasta “Arquivos de Programas” (“Program Files“) ou se você quer que ele seja instalado em alguma outra pasta específica. Além disso, você consegue configurar se o usuário poderá alterar o local de destino no momento da instalação. No nosso caso, podemos escolher para instalar o aplicativo na pasta “Arquivos de Programas” e deixar o usuário alterar a pasta caso ele desejar.

Ao prosseguir no Wizard, chegaremos no passo chamado “Application Files“, que é o mais importante do processo. Nele precisamos escolher o executável da aplicação, bem como as suas dependências. No nosso caso, o executável é o “ExemploWebcam.exe“, localizado dentro da pasta “bin/release“. Além disso, como o nosso exemplo precisa da biblioteca AForge.NET, devemos adicionar as dlls “AForge.Video.dll” e “AForge.Video.DirectShow.dll” como arquivos adicionais da aplicação:

Essa é uma grande desvantagem do InnoSetup. Nós, desenvolvedores, precisamos escolher todas as dependências da aplicação nessa etapa, enquanto que as outras ferramentas demonstradas nesse artigo conseguem detectar automaticamente os arquivos necessários. De qualquer forma, caso o seu instalador gerado com o InnoSetup não funcione devido a alguma dll faltando, confira este outro artigo que mostra como descobrir qual dll está faltando no deployment.

Enfim, no próximo passo do Wizard, chamado “Application Icons“, você conseguirá escolher se uma entrada no “menu / página Iniciar” deverá ser criado, se permitiremos que o usuário crie um ícone no desktop, “Quick Launch“, etc. Escolha as opções que você desejar e clique em “Next“.

No passo chamado “Application Documentation“, você consegue escolher o arquivo de licença (a EULA que o usuário deve aceitar antes de instalar o seu aplicativo), além de conseguir escolher arquivos a serem exibidos ao usuário antes e depois da instalação.

Os passos finais (“Setup Languages“, “Compiler Settings” e “Inno Setup Preprocessor“) não são importantes no nosso exemplo, e você pode deixá-los com as opções padrão.

Ao finalizar o Wizard, você perceberá que o InnoSetup gerou um script. Esse script é a representação dos passos a serem realizados durante a instalação do aplicativo. Confira a documentação caso você queira configurar algo diferente do que foi apresentado no Wizard.

Como você pode perceber, o Wizard do InnoSetup não é muito complexo. Isso é bom e ruim ao mesmo tempo. Bom porque você consegue facilmente criar um instalador em menos de dez minutos utilizando o Wizard. Ruim porque ele não aborda cenários mais complexos. O que fazemos caso desejemos checar se o .NET Framework 4.0 está instalado antes de instalar o seu aplicativo? E se quisermos instalar o SQL Server Express juntamente com o seu aplicativo? Aí teremos que pesquisar na web para ver qual é a sintaxe necessária para realizar essas tarefas no script do InnoSetup. Esses dois casos que eu mencionei até que não são difíceis de serem implementados. Veja só:

Nesses casos especiais, basta fazer uma busca pela Internet e com certeza você encontrará alguém que já precisou fazer o que você está querendo.

Edit: publiquei um novo artigo que mostra como desenvolver um instalador que distribui o SQL Server Express junto com a aplicação utilizando InnoSetup. Além disso, a aplicação também cria automaticamente o banco de dados caso ele não exista! Confira aqui!

Opção 3: InstallShield Limited Edition

A experiência de instalação do “InstallShield Limited Edition” não foi das melhores (o que, a propósito, chega a ser inusitado, já que estamos falando de uma ferramenta que gera instaladores). Para criar um instalador com o “InstallShield Limited Edition“, vá até a tela para adicionar um novo projeto à solução e escolha a opção “Enable InstallShield Limited Edition“, dentro da categoria “Other Project Types” => “Setup and Deployment“. Isso vai fazer com que o site para baixar o InstallShield seja aberto no seu browser padrão. Siga as instruções para criar uma conta na Flexera (atual dona do InstallShield) e, no final do processo, você conseguirá acessar o link para download bem como a sua chave de ativação.

Pelo menos no meu caso, a instalação não foi amigável. Logo de cara o instalador disse que precisava instalar uma runtime do C++. Após instalada a runtime do C++, o instalador disse que tinha que reiniciar o computador para prosseguir! Qual instalador hoje em dia ainda pede para reiniciar o computador? Enfim, após reiniciado o computador, a instalação continuou e, depois de muito tempo, finalmente eu consegui instalar o “InstallShield Limited Edition“.

No final desse processo, uma nova opção apareceu na seção “Setup and Deployment” da tela de “Add New Project“:

Adicione um projeto do tipo “InstallShield Limited Edition Project” à sua solução e siga as instruções para a ativação do produto.

O Wizard de criação de instaladores do InstallShield até que é bem bacana. Na primeira tela você consegue adicionar as informações básicas do seu aplicativo:

Logo em seguida você consegue selecionar pré-requisitos da sua aplicação (que, por sinal, é uma lista bem completa):

A próxima etapa, que não está disponível na edição limitada do InstallShield, serve para criarmos “features” na instalação. Essas features o usuário pode escolher por instalar ou não (bem comum em instaladores de diversos aplicativos). Após essa etapa, chegamos à parte mais importante: selecionar quais arquivos deverão ser instalados. Clique em “Add Project Outputs” e escolha a opção “Primary Output” do projeto exemplo:

Na etapa “Application Shortcuts” você pode optar por criar um atalho no desktop e menu/tela iniciar. Para isso, basta clicar em “New” e encontrar o “Primary Output” do projeto de exemplo:

Para concluir o Wizard, podemos escolher se queremos criar alguma entrada no registro, além de informações de EULA e outros pequenos detalhes. Vale a pena dar uma olhada também nas opções extras de cada etapa do Wizard. Elas são listadas na parte da esquerda em cada etapa:

Agora um detalhe interessante: ao chegar na última tela do Wizard, se você clica no botão para avançar, nada acontece. Isso é bem confuso. O que devemos fazer para gerar o instalador? Basta fazer um build desse projeto. No meu caso, apesar de ter acusado dois erros, o instalador foi gerado normalmente.

O setup será gerado e armazenado em uma pasta muito intuitiva (só que não!): “Express\SingleImage\DiskImages\DISK1“:

E com isso concluímos o instalador gerado através do “InstallShield Limited Edition“. Como você pode perceber, o processo não é nem um pouco amigável. Não é à toa que essa ferramenta não é bem recebida pelos desenvolvedores em geral. Vejam só um comentário que encontrei no post que fala sobre a extensão do “Install project” no Visual Studio 2013:

Concluindo

Das três opções que eu apresentei nesse artigo, a mais simples é a extensão do “Install project” para o Visual Studio 2013. Caso você já esteja familiarizado com esse tipo de projeto no Visual Studio 2010, não precisamos nem discutir que essa é a melhor opção a se considerar.

Já a opção do “InstallShield Limited Edition“, apesar de parecer um gerador de instaladores bastante robusto, a experiência foi a pior de todas. Além de demandar a instalação de uma ferramenta externa pesada, precisamos criar uma conta com a Flexera para conseguirmos fazer o download e receber a chave do produto. E a instalação precisou de runtimes do C++ que não são instaladas por padrão com o Visual Studio, demandando também uma reinicialização do sistema para concluir. Ou seja, é um produto que foi bem “mais ou menos” integrado no Visual Studio (e não 100% integrado), uma vez que a experiência de instalação deixa bastante a desejar.

O InnoSetup é uma excelente opção para quem ainda não conhecia o “Install project” do Visual Studio 2010. Ele é uma ferramenta gratuita, extremamente simples e totalmente extensível. A única desvantagem dela é que ela não consegue detectar automaticamente as dependências da aplicação.

Enfim, espero que você tenha gostado desse tour pelas principais ferramentas de instaladores para aplicativos desktop. Caso você utilize alguma outra ferramenta para gerar os seus instaladores, conte pra gente nos comentários logo abaixo. E, caso você queira ficar por dentro das novidades desse blog (bem como receber outras dicas que eu só compartilho por e-mail), assine a minha newsletter.

Até a próxima semana!

André Lima

Photo by Peter Shanks used under Creative Commons
https://www.flickr.com/photos/botheredbybees/1426877411

146 thoughts on “Criando instaladores para aplicativos .NET

  • A extensão para VS 2013 funciona na versão VS Express para Desktop?

    • andrealveslima disse:

      Olá William, obrigado pelo comentário!

      Infelizmente a extensão para o Visual Studio 2013 não funciona na versão Express do Visual Studio, uma vez que ela é uma extensão, uma feature não suportada nas edições Express.. Porém, você já viu o Visual Studio Community Edition? Essa edição foi lançada algumas semanas atrás, também é gratuita e suporta extensões (ela é basicamente igual à versão Professional só que de graça).. Eu falei sobre essa novidade no meu post de duas semanas atrás, confira: Deu a louca na Microsoft: .NET Framework open source e Visual Studio de graça?

      Caso você queira ficar por dentro de novidades como essa, assine a minha newsletter!

      Abraço!
      André Lima

  • NickoSoft disse:

    gostei do artigo, até me animei ao ver como reviver o gerador de instalacao das versoes antigas onde até me dava bem, mas tentei e o bendito por algum motivo na primeira tela ja termina a instalacao por algum motivo q nao sei…..

    o installshield tirando dessa versao mega limitada, tem a opcao de buscar dependencia, agora se funciona tmb nao sei, mas nao tive tantos problemas pra instalar e executar, salvo nao buscar qq dependencia, e eu nao ter a menor ideia de como criar novas ali na lista, igual o SQLce4, nem ideia de onde estao as dll q fazem o Provider=Microsoft.ACE.OLEDB.12.0 crio os programas no VS2013 e tenho de levar ao cliente com XP, tenho uma maquina com o XP instalado sem absolutamente mais nada, justamente pra ver o q falta e incluir os pacotes, to levando as dependencias em exe baixados de tudo q é lugar….

    • andrealveslima disse:

      Olá!
      Muito obrigado pelo comentário! Estranho você ter tido esse problema com a extensão do instalador para o Visual Studio 2013.. Aqui funcionou perfeito..
      Quanto ao InstallShield, com certeza essa versão limitada não ajuda muito.. :(
      Abraço!
      André Lima

  • Luiz Antonio disse:

    Olá Andre Lima, bom dia…só agora vi o seu artigo e gostei muito e caso possa me ajudar estou com umas duvidas em relação a instalação de um aplicativo Windows forms ou deploy com base de dados (incluindo a sua base na instalação) pelo InstallShield . Estou com a seguinte arquitetura – Aplicativo Windows Desenvolvido em Csharp.net, com base de dados anexa (SQLSERVER EXPRESS, SQLCE EDITION 2008 R2 OU SQLLITE , qual seria a melhor neste caso, supondo que o cliente final não teria o servidor SQL instalado na sua maquina e para ele não ter muita dificuldade ao instalação por ser apenas usuário, sendo que o aplicativo não será instalado em rede ou servidor e sim maquina a maquina pelo installshield) . Estou usando para fazer a aplicação o .NET FRAMEWORK 3.5 .NET, VS2008 E PARA DEPLOY O INSTALLSHIELD 2010. Se eu colocar no install Shield o SQL NATIVE CLIENTE 3.5. como pré requisito já ajudaria para pós instalação o aplicativo e a base rodar no cliente final que é uma empresa ou qual base acima citada você me aconselharia já que em cada micro não haveria um serviço ou servidor SQL INSTALADO para instalar com o installshield 2010?
    Fico no aguardo e desde já agradeço

    • andrealveslima disse:

      Olá Luiz Antonio, obrigado pelo comentário e fico feliz que tenha gostado do artigo!

      Agora vamos à sua questão.. Esse seu cenário depende muito do tamanho da sua aplicação e de quão grande é o seu banco de dados.. Ela é uma aplicação complexa que demanda muito acesso ao banco e uma quantidade muito grande de dados? Então, eu sugiro que você utilize o SQL Server Express.. Caso contrário, se você estiver trabalhando com uma massa não muito grande de dados, o SQL CE ou SQLLite são muito mais simples de serem empacotados junto ao instalador e atendem muito bem a cenários mais simples de bancos de dados..

      Como você vai ter que gerar um instalador e o seu aplicativo será instalado diretamente na máquina cliente (onde o banco de dados também deverá ser instalado), eu sugiro que você só utilize o SQL Server Express se realmente o seu banco de dados for complexo e a massa de dados seja considerável (algo acima de 100Mb, talvez?)..

      O SQLLite é o mais fácil de ser instalado, uma vez que você só precisa basicamente adicionar as suas dlls no instalador e tudo deve funcionar normalmente.. Portanto, se a sua aplicação é simples e não utiliza funcionalidades complexas de bancos de dados relacionais, essa seria a minha escolha..

      Mas, novamente.. Tudo depende da complexidade da sua aplicação e da complexidade do seu banco de dados..

      Enfim, espero que tenha ajudado.. Qualquer coisa, conte maiores detalhes da sua aplicação para uma indicação mais consistente.. Caso preferir, entre em contato também por e-mail (veja meu e-mail na página “Sobre”)..

      Abraço!
      André Lima

      • Luiz Antonio disse:

        Olá André boa tarde, na verdade seriam duas aplicações feitas em csharp .net VS2008 pro edition, Windows .NET FRAMEWORK 3.5 – UMA DELAS MAIS SIMPLES NO QUE TANGE O CADASTRO DE USUARIO PARA LOGIN E SENHA E OUTRA MAIS COMPLEXA NO QUE CONSISTE UM SOFTWARE DE GESTÃO ADMINISTRATIVA – COM CADASTRO DE USUÁRIOS, ADMINISTRADORES, FUNCIONARIOS, CURSOS, MATERIAS, ALUNOS E ATENDIMENTOS ENTRE OUTROS
        Mas na verdade o que eu queria saber, se for no caso o SQL SERVER EXPRESS 2008 R2 como eu faria uma instalação usando o INSTALL SHIELD 10 , adicionando o bd e instalando de modo fácil o bd e o sqlserver no lado do cliente que seja leigo em informática tipo qual o processo de instalação com o bd e o sqlserver Express que fosse de modo pratico e bem entendido pelo usuário final utilizando o installshield 10

        Fico no aguardo, quando puder responder e desde já agradeço

        • andrealveslima disse:

          Olá Luiz!

          Dada as descrições dos aplicativos, pelo que entendi, o banco de dados não precisará ser acessível de mais de um computador, certo? Ou seja, cada cliente terá o seu próprio banco de dados intalado localmente, correto? Se isso for verdade, não vejo o porque utilizar o SQL Server Express como banco de dados nesse cenário.. Fazer isso só tenderá a trazer problemas para você, uma vez que, pelo que entendo do que você disse anteriormente, os usuários dessa aplicação não são experientes, mas sim, simplesmente usuários comuns.. Imagina ter que manter um SQL Server Express rodando no computador de um cliente assim? Dessa forma, sugiro que você utilize algum banco de dados mais simples nesse caso, como o SQL CE ou SQLlite..

          Mas, caso você realmente queira utilizar o SQL Server Express e fazer com que o InstallShield instale o SQL Server juntamente com o aplicativo, basta procurar no Google por “installshield limited sql server express silent install”.. Você irá encontrar inúmeras discussões sobre esse tema, como este post no StackOverflow:

          http://stackoverflow.com/questions/18126267/how-to-install-sql-server-2008-r2-express-silently-using-installshield

          É isso aí.. Espero que tenha ajudado.. Dê uma olhada, pense e depois volte aqui pra contar qual o caminho que você acabou decidindo tomar..

          Abraço!
          André Lima

          • Luiz Antonio disse:

            E no caso do SqlLite e ou SqlCe Edition caso eu necessite destes existe algum link ou tutorial no cenário que ti passei anteriormente que possam os mesmos serem instalados pelo installshield 10 na pasta correta de execução do banco de dados que está na aplicação no lado do cliente?

            Fico no aguardo e desde já agradeço

          • andrealveslima disse:

            Olá Luiz,

            Para a instalação do SqlCE com o InstallShield, confira:
            http://stackoverflow.com/questions/9181157/sql-ce-4-0-as-a-installshield-prerequisite

            E para o Sqlite, que eu saiba, você só tem que adicionar a dll do sqlite no pacote do InstallShield, assim como você adicionaria qualquer outra dll de dependência da sua aplicação..

            Abraço!
            André Lima

          • Luiz Antonio disse:

            André Lima e mais uma pergunta, vi o artigo da instalação do SqlExpress pelo installshield em modo silencioso o que não geraria dificuldades para o usuario final pelo que entendi e em cima disto mais duas duvidas caso possa me ajudar

            1)Aonde fica esta janela de edição de pré-requisitos para o sqlserver no installshield 2010?

            2)e como ficaria esta linha de comando no campo dentro da janela dos pre requisitos do installshield com a adição do parameter conforme postado na resposta abaixo

            I think you missing IACCEPTSQLSERVERLICENSETERMS parameter, it is required for silent install , it should be TRUE.

            no campo especificar linha de comando na janela de pre requisitos do install shield

            SQLEXPRWT_x86_ENU.exe /q /Action=Install /Hideconsole
            /Features=SQL,Tools /InstanceName=SQLExpress
            /SQLSYSADMINACCOUNTS=”Builtin\Administrators”
            /SQLSVCACCOUNT=”NT AUTHORITY\Network Service” /SQLSVCPASSWORD=”a123″

            fico no aguardo e desde já agradeço

          • andrealveslima disse:

            Olá Luiz,

            O parametro viria no final do comando, depois de /SQLSVCPASSWORD=”xxx”.. Ou seja:

            /SQLSVCPASSWORD=”xxx” /IACCEPTSQLSERVERLICENSETERMS=TRUE

            Eu dei uma pesquisada melhor e esse esquema de editar os pré-requisitos só está disponível nas edições Premier e Professinal do InstallShield.. Qual é a edição que você está utilizando? Eu só tenho no momento a edição Limited, que não possui essa funcionalidade..

            Abraço!
            André Lima

          • Luiz Antonio disse:

            INSTALLSHIELD 10 PREMIER OK.

            FICO NO AGUARDO E DESDE JA AGRADEÇO

          • Luiz Antonio disse:

            Olá André como você me falou anteriormente para eu fazer a instalação de modo silenciosa via pre-requisitos do installshield 10 premier eu tenho que colocar nos pre-requisitos desta forma ok

            Olá Luiz,

            O parametro viria no final do comando, depois de /SQLSVCPASSWORD=”xxx”.. Ou seja:

            /SQLSVCPASSWORD=”xxx” /IACCEPTSQLSERVERLICENSETERMS=TRUE

            mas uma duvida no appconfig do visual studio já que criei o bd em formato .mdf pelo visualstudio 2008 e ele não acrescenta acho eu o password no appconfig

            a duvida é estes parametros de instalação tem que estar identico no appconfig da app a ser distribuida no installshield e tem que colocar o password

            pois quando criei o mdf direto no vs2008 ele não acrescenta senha na linha de conexão do appconfig neste caso é só acrescentar o parametro do pre-requisito do installshield mencionado,

            /IACCEPTSQLSERVERLICENSETERMS=TRUE

            tambem no app config

            fico no aguardo e desde já Agradeço

          • andrealveslima disse:

            Olá Luiz,

            A senha informada no argumento SQLSVCPASSWORD é a senha que será utilizada para o usuário administrador (“sa”).. Caso na sua string de conexão você não esteja informando usuário e senha, mas sim, utilizando o esquema de trusted connection (como eu entendi pela sua explicação), não afetará em nada a senha que você escolher no momento da instalação.. Para ter certeza, só testando a instalação e ver se o banco de dados fica acessível utilizando a connection string armazenada no seu appconfig..

            Abraço!
            André Lima

          • Luiz Antonio disse:

            A senha informada no argumento SQLSVCPASSWORD é a senha que será utilizada para o usuário administrador (“sa”).. Caso na sua string de conexão você não esteja informando usuário e senha, mas sim, utilizando o esquema de trusted connection (como eu entendi pela sua explicação), não afetará em nada a senha que você escolher no momento da instalação.. Para ter certeza, só testando a instalação e ver se o banco de dados fica acessível utilizando a connection string armazenada no seu appconfig..

            Abraço!
            André Lima

            Olá André Lima obrigado pela resposta

            Mas a minha duvida é na instalação via pre-requisitos installshield vai precisar colocar uma senha no meu BD interno .mdf no appconfig e nos pre–requisitos, alem do parametro requirido no installshield ou não é necessário

            Atenciosamente

            Luiz Antonio

          • andrealveslima disse:

            Olá Luiz,

            A princípio é para funcionar independente da senha do “sa”.. Se na sua string de conexão você não estiver informando nenhuma senha (mas sim usando Trusted Connection como mencionei anteriormente), tudo deve funcionar perfeitamente.. Como está exatamente a string de conexão no seu app config?

            Abraço!
            André Lima

          • Luiz Antonio disse:

            Ok André Lima, vou testar e depois lhe retorno e muito obrigado pela ajuda

          • andrealveslima disse:

            OK Luiz.. Assim que tiver testado volte aqui para nos contar se funcionou..

            Abraço!
            André Lima

          • Luiz Antonio Duarte Estevam Franco disse:

            Olá André Lima boa tarde
            esta é a minha conexão string do projeto que estou fazendo uma está numa classe que eu criei e outra no appconfig então ela ficaria de
            conexão classe

            @”Data Source=.\SQLEXPRESS;AttachDbFilename=C:\PROJETOSVS2008-2015\WINDOWS\minhaapp\minhaapp\bd_mybd.mdf;Integrated Security=True;User Instance=True”;

            conexão appconfig
            connectionString=”Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\bd_mybd.mdf;Integrated Security=True;User Instance=True”
            para usar com o installshield em modo silencioso ela ficaria deste jeito
            conexão classe

            @”Data Source=.\SQLEXPRESS;AttachDbFilename=C:\PROJETOSVS2008-2015\WINDOWS\minhaapp\minhaapp\bd_mybd.mdf;Integrated Security=True;User Instance=True\Action=Install\Hideconsole \IACCEPTSQLSERVERLICENSETERMS=TRUE “;

            conexão appconfig
            connectionString=”Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\bd_mybd.mdf;Integrated Security=True;User Instance=True\Action=Install \Hideconsole \IACCEPTSQLSERVERLICENSETERMS=TRUE ”
            Fico no aguardo e desde já agradeço

            Luiz – agora irei testar, se for isto e até amanhã eu reporto se deu certo ou se algo ficou faltando

            e as barras invertidas estão na direção correta porque isto foi criado desta forma via vs2008

          • andrealveslima disse:

            Olá Luiz,

            A string de conexão não precisa ser alterada! Independente de você copiar os arquivos manualmente ou instalá-los pelo InstallShield, a string de conexão deve continuar a mesma:

            connectionString=”Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\bd_mybd.mdf;Integrated Security=True;User Instance=True”

            Você só precisa adicionar os parâmetros extras (Action Install, HideConsole, IAcceptsqlserverlicenseterms) como argumentos no seu arquivo de pre-requisitos do InstallShield.. A string de conexão não muda!

            E o que eu tinha questionado é se você estava utilizando trusted connection, e pelo que vi, está (Integrated Security=True).. Dessa forma, qualquer usuário do Windows que você estiver logado conseguirá acessar o SQL Server sem precisar informar usuário e senha.. E como o sistema é somente local, funcionará perfeitamente..

            Abraço!
            André Lima

          • Luiz Antonio Duarte Estevam Franco disse:

            Obrigado mais uma vêz Andre Lima então os parametros só no pre-requisite editor? Obrigado irei testar e quando o teste estiver ok,Volto aqui e informo o procedimento para todos que estão comentando e pra você em seu Blog

            Estou usando o INSTALLSHIELD 10 PREMIER EDITION

            MUITO OBRIGADO Á TODOS

            E acredite se quiser nem no forum oficial da FLEXERA SOFTWARE não obtive este tipo de esclarecimento muito obrigado mesmo

          • andrealveslima disse:

            Olá Luiz!

            Sim, esses parâmetros são só no Pre-Requisites Editor.. São os parâmetros que o instalador do SQL Server Express deve receber para fazer a instalação de maneira silenciosa.. Na connection string você não precisa alterar nada.. Do jeito que está já deve funcionar..

            Abraço!
            André Lima

          • Luiz Antonio disse:

            Olá Andre bom dia me surgiu uma segunda duvida desta vêz com um arquivo de video que tem em minha aplicação de como instalar espero que me possa me ajudar mais nesta situação

            COMO NO INSTALLSHIELD INSTALAR UM ARQUIVO, EXEMPLO vídeo.avi que esta na pasta c:/nomemyfolder/ por causa que o componente Windows media player só reconhece o vídeo pelo caminho físico exemplo c:/nomepasta/nomevideo.avi , fazer com que este arquivo de vídeo instale nesta devida pasta que será diferente a pasta que será instalada o programa – exemplo – o programa é instalado geralmente por padrão na pasta – c:/arquivosdeprogramas/nomedoaplicativo e o vídeo está em pasta diferente c:/nomepasta/vídeo e no componente Windows media pleyr tem que ser reconhecida em csharp.net pelo caminho físico ou terial alguma alternativa em csharp para reconhecer o vídeo no caminho da aplicação sem ser path físico

            Fico no aguardo e desde já agradeço

          • andrealveslima disse:

            Olá Luiz,

            Para instalar um arquivo em uma pasta específica com o InstallShield (pelo menos na edição SE – não tenho certeza como funciona no Premium), é só você ir na parte de “Application Files”, clicar com o botão direito em “Destination Computer” e escolher a opção “Show Predefined Folder” => “WindowsVolume”.. Dentro do Windows Volume (que representa o drive “c:”), você cria a pasta que quiser e adiciona os arquivos que quiser dentro dessa pasta..

            Mas, se você já está passando um caminho específico para o Media Player pelo seu código, nada impede que você armazene o arquivo dentro do próprio diretório da aplicação (ou em uma subpasta) e passe o caminho completo desta forma:

            string diretorioInstalacao = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
            string caminho = System.IO.Path.Combine(diretorioInstalacao, “arquivoVideo.wmv”);

            Abraço!
            André Lima

          • Luiz Antonio disse:

            OLÁ ANDRÉ LIMA – BOM DIA – ALGUMAS DUVIDAS A FRENTE DE VOSSAS RESPOSTAS

            Olá Luiz,

            Para instalar um arquivo em uma pasta específica com o InstallShield (pelo menos na edição SE – não tenho certeza como funciona no Premium), é só você ir na parte de “Application Files”, clicar com o botão direito em “Destination Computer” e escolher a opção “Show Predefined Folder” => “WindowsVolume”.. Dentro do Windows Volume (que representa o drive “c:”), você cria a pasta que quiser e adiciona os arquivos que quiser dentro dessa pasta..(PERGUNTA – APLICATTION FILES – FICA EM START ABA INICIAL DO INSTALL SHIELD OU DENTRO DOS DIRETORIOS AONDE COLOCAMOS OS ARQUIVOS DA APLICAÇÃO)

            Mas, se você já está passando um caminho específico para o Media Player pelo seu código, nada impede que você armazene o arquivo dentro do próprio diretório da aplicação (ou em uma subpasta) e passe o caminho completo desta forma:

            string diretorioInstalacao = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
            string caminho = System.IO.Path.Combine(diretorioInstalacao, “arquivoVideo.wmv”);

            (PERGUNTA – ESTE CÓDIGO É PARA COLOCAR NO CSHARP.NET NA PARTE DE CÓDIGOS DO WINDOWS FORMS OU NO INSTALL SHIELd E O ARQUIVO É .AVI E TEM QUE SER ENVIADO JUNTO NA INSTALAÇÃO DO INSTALL SHIELD É POSSIVEL?)

            FICO NO AGUARDO E DESDE JÁ AGRADEÇO

          • andrealveslima disse:

            Olá Luiz,

            O Application Files no InstallShield Limited Edition é uma das seções do Wizard.. Procure na sua edição do InstallShield por uma tela parecida com esta:

            Já a segunda parte é para utilizar no código C#.. Se você optar por fazer dessa forma, você tem que configurar no InstallShield esse arquivo de vídeo para ser publicado junto com o instalador..

            Abraço,
            André Lima

          • Luiz Antonio disse:

            PORQUE ACONTECE ESTES ERROS NO COMPONENTE WMP NO VS2008
            Olá, André, como não achei o seu e-mail não tive outra forma de contato e não sei se poderia me ajudar pois não consigo terminar o meu aplicativo antes de fazer a instalação via installshield porque está dando alguns erros no meu Componente do WMP, pelo código abaixo:
            Vamos por partes este seria o primeiro erro
            using System;
            using System.Collections.Generic;
            using System.ComponentModel;
            using System.Data;
            using System.Drawing;
            using System.Linq;
            using System.Text;
            using System.Windows.Forms;
            using System.IO;
            using System.Reflection;
            using System.Media;

            namespace meuprojeto
            {
            public partial class frmVideo : Form
            {
            public frmVideo()
            {
            InitializeComponent();
            string diretorioinstalacao = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
            string caminhovideoapp = Path.Combine(diretorioinstalacao, “meuvideo.mp4”);
            // MessageBox.Show(caminhovideoapp);
            wmp_Video.URL = caminhovideoapp;
            wmp_Video.Ctlcontrols.play();
            }

            private void frmVideo_Load(object sender, EventArgs e)
            {

            }

            private void btnPlay_Click(object sender, EventArgs e)
            {
            string diretorioinstalacao = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
            string caminhovideoapp = Path.Combine(diretorioinstalacao, “meuvideo.mp4″);
            // MessageBox.Show(caminhovideoapp);
            wmp_Video.URL = caminhovideoapp;
            wmp_Video.Ctlcontrols.play();
            }
            }
            }

            Acontece este erro

            System.Runtime.InteropServices.COMException was unhandled
            Message=”Falha catastrófica (Exceção de HRESULT: 0x8000FFFF (E_UNEXPECTED))”
            Source=”System.Windows.Forms”
            ErrorCode=-2147418113
            StackTrace:
            em System.Windows.Forms.UnsafeNativeMethods.IOleInPlaceObject.SetObjectRects(COMRECT lprcPosRect, COMRECT lprcClipRect)
            em System.Windows.Forms.AxHost.SetObjectRects(Rectangle bounds)
            em System.Windows.Forms.AxHost.SetBoundsCore(Int32 x, Int32 y, Int32 width, Int32 height, BoundsSpecified specified)
            em System.Windows.Forms.Control.System.Windows.Forms.Layout.IArrangedElement.SetBounds(Rectangle bounds, BoundsSpecified specified)
            em System.Windows.Forms.Layout.DefaultLayout.ApplyCachedBounds(IArrangedElement container)
            em System.Windows.Forms.Layout.DefaultLayout.xLayout(IArrangedElement container, Boolean measureOnly, Size& preferredSize)
            em System.Windows.Forms.Layout.DefaultLayout.LayoutCore(IArrangedElement container, LayoutEventArgs args)
            em System.Windows.Forms.Layout.LayoutEngine.Layout(Object container, LayoutEventArgs layoutEventArgs)
            em System.Windows.Forms.Control.OnLayout(LayoutEventArgs levent)
            em System.Windows.Forms.Form.OnLayout(LayoutEventArgs levent)
            em System.Windows.Forms.Control.PerformLayout(LayoutEventArgs args)
            em System.Windows.Forms.Control.UpdateBounds(Int32 x, Int32 y, Int32 width, Int32 height, Int32 clientWidth, Int32 clientHeight)
            em System.Windows.Forms.Control.UpdateBounds()
            em System.Windows.Forms.Control.WmWindowPosChanged(Message& m)
            em System.Windows.Forms.Control.WndProc(Message& m)
            em System.Windows.Forms.AxHost.WndProc(Message& m)
            em System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
            em System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
            InnerException:
            Dentro da classe program.cs na seguinte linha de erro como está marcada
            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Threading;
            using System.Data;
            using System.Data.SqlClient;
            using System.Windows.Forms;
            using System.Media;

            namespace myproject
            {
            static class Program
            {
            ///
            /// The main entry point for the application.
            ///
            [STAThread]
            static void Main()
            {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            try
            {

            string tb_user = “select * from tb_usuario Order By id_user”;
            SqlConnection conn;
            SqlCommand cmd;
            SqlDataReader dr;

            conn = new SqlConnection(conexao.conex);
            cmd = new SqlCommand(tb_user, conn);
            conn.Open();
            dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            while (dr.Read())
            {
            dados.usuario = Convert.ToString(dr[“usuario”]);
            dados.senha = Convert.ToString(dr[“senha”]);
            dados.id_user = Convert.ToInt32(dr[“id_user”]);
            dados.Autorizado = Convert.ToBoolean(dr[“Autorizado”]);
            }
            // MessageBox.Show(Convert.ToString(dados.id_user));
            conn.Close();

            if (dados.Autorizado != false)
            {

            {

            Application.Run(new frmMain());//erro wmp provocado nesta linha

            }

            }
            else
            {

            frmCadastro fm1 = new frmCadastro();

            fm1.ShowDialog();

            }
            }
            catch (Exception err)
            {
            MessageBox.Show(“Erro:” + err);
            }

            }
            }
            }

            Falha catastrófica (Exceção de HRESULT: 0x8000FFFF (E_UNEXPECTED))

            Apesar de mostrar o video e o áudio fica este erro chato em debug o porque que ocorre este erro?
            O Outro problema na verdade já não aconteceria mais o erro mas não mostra o vídeo e sim apenas o áudio do arquivo de vídeo mudando a classe frmVideo.cs com o código desta forma
            using System;
            using System.Collections.Generic;
            using System.ComponentModel;
            using System.Data;
            using System.Drawing;
            using System.Linq;
            using System.Text;
            using System.Windows.Forms;
            using System.IO;
            using System.Reflection;
            using System.Media;

            namespace meuproject
            {
            public partial class frmVideo : Form
            {

            public frmVideo()
            {
            InitializeComponent();
            wmp_Video = new AxWMPLib.AxWindowsMediaPlayer();
            wmp_Video.BeginInit();
            wmp_Video.Name = “wmp_Video”;
            wmp_Video.TabIndex = 0;
            wmp_Video.EndInit();
            this.Controls.Add(wmp_Video);

            }

            private void frmVideo_Load(object sender, EventArgs e)
            {

            }

            private void btnPlay_Click(object sender, EventArgs e)
            {
            string diretorioinstalacao = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
            string caminhovideoapp = Path.Combine(diretorioinstalacao, “meuvideo.mp4”);

            this.Controls.Remove(wmp_Video);
            wmp_Video.Dispose();
            wmp_Video = new AxWMPLib.AxWindowsMediaPlayer();
            wmp_Video.BeginInit();
            wmp_Video.Name = “wmp_Video”;
            wmp_Video.TabIndex = 0;
            wmp_Video.Size = new Size(640, 480);
            //wmp_Video.EndInit();
            this.Controls.Add(wmp_Video);
            MessageBox.Show(caminhovideoapp);
            wmp_Video.URL = caminhovideoapp;
            wmp_Video.Ctlcontrols.play();

            }
            }
            }

            só aparece o audio não mais o video

            Caso possa me ajudar mais nesta fico no aguardo e desde já agradeço

          • andrealveslima disse:

            Olá novamente Luiz,

            Você encontra o meu e-mail na minha página “Sobre“.. Se quiser entrar em contato por e-mail, fique a vontade..

            Já quanto ao seu problema, achei muito estranho.. Será que não tem nada de errado com o seu vídeo? Eu baixei um vídeo mp4 qualquer do site http://sample-videos.com/ (mais específicamente este), copiei para dentro do diretório bin/debug do meu projeto de exemplo, criei um form novo, arrastei o controle do Media Player e, com este código abaixo, tudo funcionou perfeitamente, sem nenhuma exception (tanto áudio quanto vídeo):

            public Form1()
            {
            InitializeComponent();

            string diretorioinstalacao = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
            string caminhovideoapp = System.IO.Path.Combine(diretorioinstalacao, “SampleVideo_1080x720_1mb.mp4”);

            axWindowsMediaPlayer1.URL = caminhovideoapp;
            axWindowsMediaPlayer1.Ctlcontrols.play();
            }

            Abraço!
            André Lima

  • Luiz Antonio disse:

    Olá no caso da instalação INSTALLSHIEDLD 10 PREMIER COM O SQLLITE QUE VOCÊ ME REPORTOU ACIMA AS DLLS DO SQLLITE ESTARIAM INSTALADAS NA PASTA DA APLICAÇÃO OU FOLDER DE INSTALAÇÃO DO APLICATIVO OU COMO PRÉ-REQUISITO OU SERIA no INSTALL SHIELD 10 PREMIER INSTALADOS COMO PRÉ-REQUISITOS

    FICO NO AGUARDO E DESDE JÁ GRATO PELAS INFORMAÇÕES

    • andrealveslima disse:

      Olá Luiz, desculpe a demora em responder..

      Não estou com o InstallShield Premier instalado, portanto, não posso te dizer com certeza onde encontrar o PreRequisites Editor.. Mas, pelo que pesquisei, você encontra essa ferramenta na pasta de instalação do InstallShield, subdiretório “Support”, executável “PrereqEditor.exe”..

      Quanto à questão do Sqlite, a dll deve ser distribuída junto na pasta de instalação, e não como pré-requisito..

      Tente aí e depois volte aqui pra contar pra gente se funcionou!

      Abraço!
      André Lima

      • Luiz Antonio Duarte Estevam Franco disse:

        Olá mais uma coisa quando eu instalei o meu SqlServer 2008 R2 express já que vi agora a linha do parâmetro modo silencioso de installshield ele coloca no parametro

        dos prerequisitos (achei o aplicativo PrereqEditor.exe na pasta Support de Instalação do meu Installshield 10 ) mas ele coloca na linha de parametro o seguinte

        SQLEXPRWT_x86_ENU.exe /q /Action=Install /Hideconsole
        /Features=SQL,Tools /InstanceName=SQLExpress
        /SQLSYSADMINACCOUNTS=”Builtin\Administrators”
        /SQLSVCACCOUNT=”NT AUTHORITY\Network Service” /SQLSVCPASSWORD=”a123″

        Quando eu instalei o meu SQLSERVER 2008 R2 instalei ele não como NT AUTHORITY\Network Service, que está em modo automatico, mas sim como

        LocalSystem

        para instalar com o installshield no modo silencioso o sqlserver express no micro do usuario tem que ser NT AUTHORITY\NETWORK SERVICE COMO LINHA DE PARAMETRO ACIMA OU não haverá problema se for LocalSystem que foi instalado no modo automatico

        Fico no aguardo e desde já agradeço

        • andrealveslima disse:

          Olá Luiz,

          Não é pra ter nenhuma diferença na instalação silenciosa do Report Viewer se você utilizar o LocalSystem ao invés de Network Service.. A única coisa é que dessa forma o SQL Server vai realmente ser instalado utilizando o Local System.. Se esse é o resultado que você está esperando, então, não terá nenhum problema..

          Abraço!
          André Lima

          • Luiz Antonio disse:

            Mas por este modelo de instalação conforme pede os pré-requisitos do installshield também é instalado silenciosamente ou seja do mesmo modo que o NT AUTHORITY\NETWORK SERVICE no lado do micro do cliente

            Fico no aguardo e desde já agradeço

          • Luiz Antonio disse:

            Mas por este modelo de instalação conforme pede os pré-requisitos do installshield também é instalado silenciosamente ou seja do mesmo modo que o NT AUTHORITY\NETWORK SERVICE no lado do micro do cliente,

            e se eu usar O NT AUTHORITY\NETWORK SERVICE QUAL A DIFERENÇA O BANCO OU BASE TERIA QUE ESTAR NA NET AO INVÉS DE LOCAL JÁ QUE VOCE DIZ QUE EM LOCAL SYSTEM MESMO EM MODO SILENCIOSO ELE INSTALA O SQLSERVER EXPRESS – NESTE CASO PRO USUARIO QUAL SERIA O MELHOR O NET OU O LOCAL? OU TANTO FAZ COMO VC REPORTOU

            FICO NO AGUARDO E DESDE JÁ AGRADEÇO

            Fico no aguardo e desde já agradeço

          • andrealveslima disse:

            Olá Luiz,

            O usuário utilizado na instalação não afeta em nada o fato da instalação ser feita de maneira silenciosa.. Tanto utilizando o Network Service quanto utilizando o Local System, o instalador rodará de forma silenciosa.. O que faz ele rodar silenciosamente são os parâmetros /Action=Install /Hideconsole /IACCEPTSQLSERVERLICENSETERMS=TRUE ..

            Já quanto a diferença entre Network Service e Local System, não tem nada a ver com se o SQL Server será rodado na rede ou não.. A diferença é que o Network Service tem menos privilégios que o Local System.. Dessa forma, você pode utilizar o Network Service normalmente, mesmo se o banco de dados for utilizado somente no computador cliente.. Veja mais informações sobre a diferença da utilização dessas duas contas nesta discussão:

            http://stackoverflow.com/questions/12408578/what-value-should-i-use-for-the-sqlsvcaccount-parameter-when-installing-sql-serv

            Abraço!
            André Lima

      • Luiz Antonio Duarte Estevam Franco disse:

        AH E MAIS UMA PERGUNTA – POR exemplo eu criei o projeto principal no INSTALLSHIELD10 PREMIER – EXEMPLO – PROJETOSETUPBD

        Após configurar o PRÉ REQUISITE EDITOR para a base no modo silencioso o projeto principal ou todos os deploys que o INSTALL SHIELD 10 PREMIER QUE TIVEREM BASES SQLS SERÃO INSTALADOS EM MODO SILENCIOSO OU COMO O PROJETOSETUPBD DO PROJETO PRINCIPAL DO INSTALLSHIELD10, RECONHECE A CONFIGURAÇÃO QUE FIZ NO PRÉ-REQUISITE EDITOR

        VOCÊ NÃO TERIA UM LINK TUTORIAL OU VIDEO DE COMO USAR O PRE-REQUISITE EDITOR COM O PROJETO PRINCIPAL DO INSTALLSHIELD 10 OU CONFIGURANDO UMA VEZ ELE TODOS OS PROJETOS QUE TIVEREM DB SERÃO INSTALADOS EM MODO SILENCIOSO OU PRECISO PRIMEIRO EXECUTAR ALGUMA ABA DO PREREQUISITE E DEPOIS ADICIONAR ALGUM TIPO DE ARQUIVO NO PROJETO PRINCIPAL PROJETOSETUPBD

        ENFIM COMO FAÇO PARA REFERENCIAR O PROJETO CONFIGURADO NO PRE-REQUISITE EDITOR NO PROJETO QUE ESTA NO INSTALLSHIELD10 OU ELE RECONHECERÁ AUTOMATICAMENTE?

        FICO NO AGUARDO E DESDE JÁ AGRADEÇO

        • andrealveslima disse:

          Olá Luiz,

          Como falei anteriormente, não estou com o InstallShield Premier no momento, só tenho o InstallShield Limited Edition aqui em um ambiente de testes.. No caso do Limited Edition, na janela de opções, tem uma aba chamada “Prerequisites”.. Nessa aba, você pode selecionar o caminho onde os arquivos “prq” estão armazenados (no seu caso, seria o caminho onde você salvou o arquivo “prq” que você criou no PreRequisite Editor).. Acredito que no InstallShield Premier seja algo muito parecido..

          Abraço!
          André Lima

  • andre disse:

    amigo, como eu faço para na hora da instalacao da nova versao, o sistema desinstalar a versao antigo e instalar a nova?

    obrigado

  • edson passos disse:

    André, boa tarde!
    Segui exatamente os passos indicados para criar o instalador por meio do VS 2013, entretanto, na pasta foi criado um arquivo setup.vdproj e não um executável, Você poderia me orientar sobre a forma de proceder para resolver esse problema?
    Grato!

    • andrealveslima disse:

      Olá Edson, obrigado pelo comentário!

      Após adicionar e configurar o projeto de Setup, você precisa compilá-lo.. Durante a compilação, o instalador (arquivo .msi – Microsoft Installer) será gerado no diretório escolhido como output:

      Abraço!
      André Lima

      • edson passos disse:

        Boa tarde, grato pela orientação.

        Você poderia indicar algum artigo, seu ou que você tenha conhecimento, de como passar o valor da textbox diretamente para o report viewer (vb 2012)?

        • andrealveslima disse:

          Olá Edson, obrigado pelo comentário!

          Você pode passar o valor de um TextBox da aplicação para o seu relatório através de parâmetros do Report Viewer.. Você encontra um exemplo de passagem de parâmetros para o Report Viewer neste link:

          Using report parameters in local mode

          Além disso, eu falo sobre esse assunto no meu e-book sobre Report Viewer também (além de outros tópicos).. Ele está para ser lançado nas próximas semanas.. Se você quiser ser uma das pessoas que saberá sobre o lançamento em primeira mão, assine a minha newsletter..

          Abraço!
          André Lima

  • Rudinei Rufino disse:

    Ola amigo!

    como atualizar a aplicação via installshield esiste alguma maneiro?

    na minha pasta “bin/release“ não tem nada ai não consegui usar o inno, mas tinha vontade de aprender?

    • andrealveslima disse:

      Olá Rudinei, obrigado pelo comentário!

      Como assim atualizar a aplicação? Você quer dizer quando sua aplicação já estiver instalada e o usuário rodar o instalador de novo a versão mais nova seja instalada? Se sim, tem uma discussão no StackOverflow justamente sobre isso:

      Updating application using InstallShield in VS2012

      Se não for isso que você está querendo, por favor, dê maiores detalhes..

      Abraço!
      André Lima

  • […] tempos atrás eu escrevi um artigo sobre instaladores para aplicativos .NET, onde eu abordo três opções de instaladores para aplicativos criados com o .NET Framework. […]

  • Emerson disse:

    Olá André.
    Excelente publicação. Parabéns.
    Devo estar fazendo algo errado, sigo as orientações para criar a chamada da aplicação no Menu Iniciar, porém não acontece.
    Sou administrador da máquina onde estou testando.
    Obrigado !

    • andrealveslima disse:

      Olá Emerson, obrigado pelo comentário!

      Que estranho hein.. Qual das três modalidades de instalador você está utilizando? Quais são exatamente os passos que você está seguindo? Poderia dar mais detalhes?

      Valeu! Abraço!
      André Lima

  • Diogo Dias disse:

    Olá André, tudo bem? Você sabe me dizer se existe alguma maneira de criar um instalador MSI multiculture? Por exemplo, eu criei uma aplicação e gerei o instalador MSI, mas tive que adicionar algumas labels fixas dentro da instalação, como por exemplo “Informe o IP do Servidor” e isso consequentemente não é traduzido.

    Você sabe me informar se eu tenho que gerar um MSI para cada linguagem na qual os meus clientes irão utilizar? Tem como juntar todos esse MSI’s é um só?

    • andrealveslima disse:

      Olá Diogo, obrigado pelo comentário!

      Você está utilizando o Setup Project do Visual Studio para gerar os seus MSIs? Caso positivo, de acordo com a página de documentação, você terá que gerar um MSI para cada idioma diferente..

      You will need to create a separate installer for each localized version of your application; it is not possible to create a single installer for multiple locales.

      Maiores detalhes aqui:

      Localizing Windows Installer Packages

      Abraço!
      André Lima

  • […] 2) Criando instaladores para aplicativos .NET […]

  • Thalison disse:

    Criei uma instalador com o visual studio installer mas não consigo criar um atalho funcional seto o target com application folder quando instalo apenas cria um atalho para pasta, como faço para criar um atalho que funcione?

    • andrealveslima disse:

      Olá Thalison, obrigado pelo comentário!

      Você está tentando criar um atalho aonde, no desktop? Se for o caso, você só precisa ir até a pasta “User’s Desktop”, clicar com o botão direito no painel à direita e escolher a opção “Create New Shortcut”.. Aí, na janela que se abre, vá até “Application Folder” e escolha para onde você quer apontar o atalho (por exemplo, “Primary output from NOME_DO_SEU_PROJETO”)..

      Tente aí e me fala se funcionou.. E, caso fique com dúvida, comente novamente..

      Abraço!
      André Lima

  • Rodrigo Otávio Belo disse:

    Olá Andre.

    Como devo fazer para que a instalação remova a versão anterior instalada?

    Estou usando o primeiro exemplo do artigo.

  • edson disse:

    Bom dia André, estou usando o installshield. Gero o pacote sem problemas so que na hora da instalação ocorre alguns erros. Estou usando um bd feito no access e a máquina que instalei não tem o referido aplicativo, será que os erros ocorrem por isso?

    • andrealveslima disse:

      Olá Edson, obrigado pelo comentário..

      Quais são exatamente os erros que estão acontecendo? Com as mensagens de erro, talvez eu consiga de ajudar melhor.. A princípio, tendo o Jet instalado e os providers do MS Access, o aplicativo deve funcionar normalmente, mesmo sem o Office estar instalado..

      Mande mais detalhes que eu tento te ajudar melhor..

      Abraço!
      André Lima

  • vanderlei disse:

    Excelente post. Mas tenho uma duvida.
    Como coloca alguns DLL fora da pasta padrão. Por exemplo dentro do system32?
    Agaurdo contato

    • andrealveslima disse:

      Olá Vanderlei, obrigado pelo comentário!

      Eu demonstrei três ferramentas de instaladores nesse artigo.. Qual delas você está utilizando? A implementação é diferente em cada ferramenta, então, me conte aqui qual é a ferramenta que você está utilizando aí eu te explico como colocar dlls em outras pastas..

      Abraço!
      André Lima

  • Ezequiel da Silva Daniel disse:

    Olá Andre!
    Uma duvida, já precisou fazer uma instalação silenciosa? Tipico de uma atualização automática? Estou precisando desenvolver aqui na empresa um recurso de atualização automática no produto. Eu fiz um protótipo baseado na forma: baixa um pacote .zip com arquivos do programa, ai o serviço descompacta, e copia para a pasta destino da instalação, e mais algumas checagem, que faço na mão. Estava pensando em usar o InstallShield para isso, pois ele já faria todo este processo, com a vantagem de copiar apenas o arquivo alterado e se por acaso der algum problema, realizar um rollback. Já preciso fazer algo do gênero? O que indicaria? A aplicação é Windows Form.

    • andrealveslima disse:

      Olá Ezequiel!

      Instalação silenciosa eu só fiz com o ClickOnce, mas foi muito tempo atrás.. Não sei se você conhece, mas, ele tem um esquema de detectar se existe atualização disponível e instalar automaticamente antes do usuário abrir o sistema ou depois que ele fechar o sistema (é configurável)..

      Outras bibliotecas que eu nunca utilizei mas que outros leitores do site já me recomendaram são estas:

      NAppUpdate
      AutoUpdater.NET

      É isso.. Espero que tenha ajudado em algo.. Depois volta aqui e avisa a gente como você solucionou essa demanda..

      Abraço!
      André Lima

  • Ana Reis disse:

    André Alves! Desculpe-me nao responder à mensagem anterior! Eu resolvi o problema do reportviewer. :)
    Queria saber, por favor, como anexar o banco de dados access ao instalador do inno setup, pois nao estou conseguindo de forma nenhuma…
    Usei o Install Creator, contuto existe um antivirus que detecta um falso positivo se eu usar esse instalador, ja outros antivirus nao detectam nada.
    Preciso saber como anexa o access ao Inno Setup, por favor!
    Desde já agradeço!

    • Ana Reis disse:

      Esqueci rs..
      Se possivel também saber como anexa o access ao instalador do próprio Visual Studio.
      Estou usando a linguagem VB. Obrigada!

      • andrealveslima disse:

        Olá Ana, tudo bem?

        Você precisa distribuir juntamente com a sua aplicação o Microsoft Access Runtime.. Faça o download da versão que você utilizou para desenvolver a sua aplicação (2010 ou 2013, por exemplo) e adicione uma “custom action” no seu instalador para rodar esse executável passando o parâmetro /quiet para que ele seja instalado silenciosamente.. Para exemplos de criação de “custom actions” nos setup projects, confira estes links:

        Walkthrough: Creating a Custom Action

        How to run a “.bat” file during installation?

        Se você não conseguir resolver, me avisa que eu tento te ajudar de outra forma..

        Abraço!
        André Lima

        • Ana Reis disse:

          Ok! Vou tentar aqui e qualquer coisa eu aviso!
          Muito obrigada!

          • Ana Reis disse:

            Olá André! Consegui anexar o BD! Contudo, existe uma questão que estou tentando resolver já um bom tempo e não consigo: Toda vez que testo o programa em uma maquina virtual com Avast ou Psafe, esses antivírus detectam um falso positivo no .exe do software (digo isso porque quando eles fazem a varredura não encontram nada, e o antivírus da Microsoft, por exemplo, não detecta nada). Já criei uma chave de registro dentro do programa, como pesquisei a respeito, mas não funciona. Ambos os antivírus detectam falso positivo. Você tem alguma ideia de como pode ser resolvido? Desde já agradeço e desculpe postar uma dúvida em um post com outro assunto.

          • andrealveslima disse:

            Olá Ana, que bom que você conseguiu anexar o banco!

            Muito estranho esse negócio do Avast, hein.. Qual é exatamente a mensagem de erro que o anti-vírus está retornando? Ele detecta um vírus específico ou é uma mensagem mais genérica?

            Ah, outra pergunta: o instalador sem esse esquema do banco de dados também dá falso positivo? Você já tentou criar o instalador para um aplicativo bem simples (tipo um formulário + botão + message box quando clicado) para ver se o Avast está detectando vírus em qualquer instalador ou somente no instalador da sua aplicação?

            Infelizmente será um trabalho de detetive para descobrir o problema.. Se você quiser colocar o seu instalador no OneDrive ou Dropbox para eu dar uma testada aqui em uma máquina virtual com Avast, fique a vontade (se preferir, envie o link para mim por e-mail para não ficar público aqui no site)..

            Abraço!
            André Lima

        • Ana Reis disse:

          Enviei o email!
          obrigada!!!!

      • Ana Reis disse:

        Olá Andre! Coloquei o arquivo já tem um tempinho… Voce viu?! Obrigada!

        • andrealveslima disse:

          Olá Ana!

          Desculpe a demora.. Só ontem que eu consegui montar a máquina virtual para testar.. Realmente eles acusam vírus mesmo, muito estranho.. O mais estranho é que somente o instalador é detectado como vírus.. O aplicativo em si funciona de boa..

          Enfim, o Avast tem um esquema de reportar falsos positivos, você já tentou enviar o instalador para eles analisarem? O formulário é bem tranquilo e, pelo que eu pesquisei, eles respondem bem rápido:

          Avast False Positive File Form

          Já o PSafe não tem esse tipo de formulário, mas, você poderia entrar em contato com o suporte deles aqui:

          PSafe Support

          Outra coisa que você poderia tentar (que eu li em algum lugar que pode ajudar para evitar esses falso positivos) é assinar os seus assemblies.. Não sei se realmente vai ajudar, mas, é algo que você poderia tentar:

          Assinatura Digital de Softwares

          Como assinar um assembly com um nome forte

          Assinando Assemblies com nomes fortes

          Abraço!
          André Lima

          • Ana Reis disse:

            Obrigada Andre! Tentei mais uma vez mas persistiu o erro. Entrei em contato com as empresas de Antivirus e uma delas disse que o .exe estava limpo, a outra nao me retornou.
            Acabei fazendo o instalador pelo VB mesmo e nenhum antivirus detectou nada!

          • andrealveslima disse:

            Olá Ana, obrigado pelo retorno!

            Realmente algumas empresas de anti-vírus são complicadas.. Infelizmente, pelo que pesquisei, tem alguns anti-vírus que detectam instaladores do Inno como vírus mesmo, não sei porque.. Enfim, de qualquer forma, fico feliz que você tenha conseguido resolver o seu problema criando o instalador pelo VB diretamente.. Apesar de não ser a solução mais ideal, se resolveu o seu problema, está valendo.. Talvez quando você tiver um tempinho, valeria a pena investigar os outros tipos de instaladores além do Inno que eu mencionei neste artigo..

            Abraço!
            André Lima

          • Ana Reis disse:

            Fala Andre! Tudo bem?!
            Poderia me tirar uma dúvida por favor?
            Quando é criado o instalador de um programa através do instalador do VB, ele instala automaticamente no endereço C:\Arquivos de Programas (x86). É possível eu mudar esse endereço durante a criação do setup?
            Obrigada!

          • andrealveslima disse:

            Olá Ana!

            O que você quer dizer com “instalador do VB”? É uma dessas opções que eu mostrei no artigo ou é algo completamente diferente? Me explica melhor como você criou o instalador para eu poder te ajudar melhor..

            Abraço!
            André Lima

  • Vinícius de Moura Machado disse:

    Olá Andre, tudo bem? Cara eu segui os passos dos instaladores InnoSetup e Install Project, ambos me geraram os instaladores e ambos funcionaram, mas mesmo assim quando tento rodar a aplicação em uma outra maquina, me da um erro de erro de instancia do sql server, o que eu devo fazer quando isso acontece?

    att,

    Vinícius

    • andrealveslima disse:

      Olá Vinícius!

      Qual é exatamente o erro que você está recebendo? O SQL Server está instalado no computador cliente? Tem certeza que o nome da instância do computador cliente está batendo com o nome da instância que você utilizou na sua string de conexão?

      Abraço!
      André Lima

      • Vinícius de Moura Machado disse:

        Eu recebo o erro “Erro de rede ou específico à instancia ao estabelecer conexão com o Sql Server. O servidor não foi encontrado ou não esta acessível. Verifique se o nome da instancia está correto e se o Sql Server está configurado para permitir conexões remotas”. Eu tenho que ter instalado o Sql Server na maquina do cliente?

        No meu caso aqui na empresa, tenho vários computadores que irão utilizar o programa de estoque que desenvolvi, nesse caso o banco deveria estar no servidor para que todos acessassem o mesmo banco. Não sei se consegui explicar muito bem, porque também estou bem confuso com isso.

        • andrealveslima disse:

          Olá Vinícius!

          Se o sistema será utilizado por mais de um usuário em diferentes computadores e o banco de dados tiver que ser compartilhado entre todos eles, aí sim, você terá que instalar o SQL Server em um servidor e ajustar a sua string de conexão para apontar para o endereço do servidor..

          Como é que você está fazendo a conexão? Onde está armazenada a sua string de conexão?

          Abraço!
          André Lima

          • Vinícius de Moura Machado disse:

            Desculpa a demora para responder, André. Creio que consegui solucionar o problema, instalei o Sql Server na máquina do servidor, habilitei as portas de TCP/IP, e usei o um backup do banco de dados e coloquei-o no servidor, mudei a string de conexão para o banco do servidor e parece que funcionou, instalei o programa em 3 máquinas da rede e elas estão realizando o CRUD com sucesso.

          • andrealveslima disse:

            Maravilha, Vinícius! Fico feliz que tenha funcionado.. Qualquer coisa entre em contato novamente..

            Abraço!
            André Lima

  • Ana Reis disse:

    Fala, André! Tudo bem?!
    Existem duas questões na verdade….a primeira é que quando eu crio o instalador pelo Visual Basic, ele faz automaticamente a instalação no C:\Arquivos de Programas (x86). Queria saber se é possível mudar esse endereço.
    A outra é que pedi para uns amigos meus testarem meu programa e o estranho é que a instalação ocorre normalmente, mas ai depois não existe nenhuma pasta referente.. como se não tivesse ocorrido uma instalação de fato!
    Eu uso o Silent Install Builder para juntar os outros .exe e .mis que o programa necessita… mas mesmo assim não entendo esse erro.
    Obrigada!

    • andrealveslima disse:

      Olá Ana!

      Eu não conhecia o Silent Install Builder.. Pelo que entendi, com ele você grava as etapas da instalação (o next, next, finish) e ele gera um instalador que consegue efetuar a instalação sem que o usuário tenha que fazer nada, correto? Pelo tutorial que eu assisti do Silent Install Builder, você tem que escolher um instalador na hora de gerar o pacote dele, certo? Qual instalador você escolheu? O instalador que você gerou pelo InnoSetup? Se esse é o caso, você consegue adicionar os msi e exe para serem instalados diretamente pelo InnoSetup também..

      Quanto ao seu segundo problema, se você quiser colocar o seu instalador neste link para eu testar uma instalação em uma máquina virtual, depois eu te falo se deu certo a instalação:

      https://www.dropbox.com/request/npIiMxYyOq1HI3bRP2K8

      Abraço!
      André Lima

  • Ana Reis disse:

    Tipo isso rsrsrs… Descobri como faz!
    Ja coloquei os instaladores no Dropbox! É que eu fiz alguns testes e estou enviando eles..Obrigada!

  • Tânia Maio disse:

    Viva André!
    Obrigada pela partilha! ;)
    Estou a usar a Opção 1: Extensão do Install Project para o Visual Studio no meu projeto. Este contém uma base de dados ACCESS. Mas ao utilizar o programa depois de instalado, esta a dar-me o seguinte erro: “system.data.oledb.oledbexception a operação tem que utilizar uma consulta actualizavel”. Isto tem a ver com as permissões nas pastas. O que fiz foi selecionar o controlo total dos utilizadores nas propriedade da pasta do programa.
    Existe forma de colocar a pasta onde o programa é instalado sem restrições para o utilizador?

    Cumprimentos e obrigada!
    Tânia

    • andrealveslima disse:

      Olá Tânia!

      Toda aplicação que estiver dentro da pasta “Arquivos de Programas” (Program Files) sofre essas restrições.. Nesse caso, se você realmente quiser que a sua aplicação rode dentro dessa pasta, ou você altera as permissões (como você fez) ou você adiciona um manifesto na sua aplicação forçando o aplicativo a ser executado em modo administrador (veja como fazer isso neste link)..

      Outra opção é forçar a instalação do aplicativo em uma pasta fora do “Arquivos de Programas” (por exemplo, “C:\SeuApp”).. Para isso, você precisa, no projeto de instalador, alterar a propriedade “DefaultLocation” do item “Application Folder” e, depois, no item “User Interface” (para abrir essa tela, clique com o botão direito no projeto e escolha “View -> User Interface”), você tem que deletar o item “Installation Folder”.. Dessa forma o usuário não terá mais a opção de escolher a pasta de instalação e o seu aplicativo será sempre instalado na pasta que você definiu em “DefaultLocation”..

      Abraço!
      André Lima

  • Marcelo Dias disse:

    André, bom dia
    Excelente seu artigo, estou desenvolvendo uma aplicação em WPF e precisava entender o processo de instalação.

    Porém minha aplicação possui um caso especial..preciso definir duas variáveis no momento da instalação, uma por exemplo é o ambiente do sistema que pode estar em “desenvolvimento”, “aceite” ou “produção”.

    Vc acha que temos como criar essas opções na instalação? ou seja quando o usuário estiver instalado ter a opção de escolher o ambiente?

    Eu preciso que o meu sistema em WPF já entre com o ambiente correto.

    Vc me ajuda com essa dúvida?

    Desde já agradeço sua ajuda, e novamente meus parabéns pelo site e pelos artigos.

    Também tenho um site http://www.marc29dias.com.br se puder entrar e me dizer o que acha agradeceria muito!

    • andrealveslima disse:

      Olá Marcelo, muito obrigado pelo comentário!

      Como é que você está lidando com essas variáveis de ambiente hoje em dia? Elas realmente são variáveis de ambiente do sistema operacional? Ou talvez são entradas no registro? Ou algum arquivo de configuração específico da sua aplicação?

      Normalmente qualquer ferramenta de instalador possibilita a criação de uma ou mais telas customizadas a serem exibidas no momento da instalação.. Por exemplo, no InnoSetup você pode criar “custom wizard pages” e no Setup Project to Visual Studio você pode criar “custom dialog box” ou “custom actions“.. Aí você teria que criar a página customizada e codificar a lógica necessária para criar as suas variáveis..

      Resumindo: depende de como você está trabalhando com essas variáveis e qual a ferramenta de instalador que você está utilizando..

      Ah, tentei abrir o seu site pelo link que você passou, mas, deu erro.. Pesquisando melhor eu encontrei outro endereço que funciona: http://marcdias.com.br/ .. Seria esse o seu site? Se sim, parece bem bacana.. Só precisa voltar a postar, né? O último post no blog tem quase dois meses.. Hehehe..

      Abraço!
      André Lima

  • Jorge disse:

    Como crio um atalho para o .exe criado no repositório C: do computador do cliente?

  • Diego disse:

    Parabéns, muito interessante o artigo. Tenho uma dúvida em relação ao instalador nativo do VS, como adiciono em meu projeto windows forms o banco de dados da aplicação? Qual a melhor maneira de incluir do banco no instalador? Isso é uma boa prática?

    Como adiciono também ao instalador executaveis? como por exemplo o Net Framework?

    Preciso colocar no instalador tudo que a aplicação necessita pra rodar, de forma que o sistema saia funcionando após o usuário dar next, next, finish :)

    Valeuu! Abraços

    • andrealveslima disse:

      Olá Diego, obrigado pelo comentário!

      Com o projeto de setup do Visual Studio, você pode selecionar pré-requisitos.. É só abrir a janela de propriedades, clicar em “Prerequisites” e escolher os requisitos da sua aplicação.. Nessa janela você pode, por exemplo, escolher para que o .NET Framework e o SQL Server seja instalado junto com a sua aplicação.. Você já chegou a dar uma olhada nisso?

      Abraço!
      André Lima

  • Celio Morikoshi disse:

    André! Seu artigo era o que eu estava precisando. Consegui instalar tudo certinho, porém quando vou restaurar o BANCO DE DADOS ocorre este erro que parece que está com o caminho do backup duplicado.

    Cannot open backup device’ c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\Backup\ c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\Backup\nomeArquivo.bak.

    Operating system error 123(A sintaxe do nome do arquivo, pasta ou nome do volume está incorreta)
    Restore database is terminating abnormally.

    Alguém mais já passou por isto? OBS.: Eu consegui instalar corretamente uma vez, mas desinstalei e tentei novamente e começou a apresentar este erro.

    • andrealveslima disse:

      Olá Celio, obrigado pelo comentário!

      Agora fiquei meio perdido.. Você enviou um comentário uns dias antes falando que estava com problema na hora de dar o restore, mas, a mensagem de erro era outra.. Qual é o estado atual desse seu problema? Essa é a mensagem de erro que você está recebendo atualmente? Como é que ficou o seu código final? Você modificou alguma coisa ou utilizou exatamente o mesmo código que eu passei no artigo?

      Abraço!
      André Lima

  • Alexandre disse:

    Visual studio 2015 naõ tem a opção Setup And Deployment, como fazer?

  • Luiz Eugênio Barbieri disse:

    Boa tarde André, tudo bem?

    Li toda sua publicação e grande parte dos comentários, porém não vi nada especifico para WEB, caso minha pergunta seja repetida peço desculpas antecipadas, caso contrário minha dúvida é a seguinte.

    Estou buscando materiais informativos que me auxiliem na criação de um instalador para um ERP WEB. Basicamente eu precisaria que esse instalador:
    *Transfira os arquivos;
    *Verifique se o computador possui SQL Express 2014 instalado, caso contrário, chame o instalador;
    *Execute um script de configuração do IIS(converter pasta em aplicação e etc…)

    Em minhas pesquisas fui feliz em encontrar seu blog e através dele cheguei em https://msdn.microsoft.com/en-us/library/aa560895.aspx. A parte de transferir os arquivos é a mais simples, o script para configuração também não é lá um problema, porém minha dúvida crucial é se é possível agrupar todas essas configurações em um único instalador.

    Desde já agradeço sua atenção, abraço, Luiz.

    • andrealveslima disse:

      Olá Luiz!

      Infelizmente não tenho experiência com a geração desse tipo de instalador que faz a configuração automática do site no IIS.. Vou colocar aqui na minha lista para dar uma pesquisada sobre esse tema..

      Entretanto, você disse que “a parte de transferir os arquivos é a mais simples, o script para configuração também não é lá um problema” e que a sua maior dúvida é como “agrupar todas essas configurações em um único instalador”.. Eu acredito que se você criasse arquivos .bat com as etapas da instalação, você conseguiria criar um instalador no InnoSetup que faria o agrupamento e execução desses arquivos .bat.. Você já pensou em utilizar essa alternativa?

      Abraço!
      André Lima

  • […] e adicionar os arquivos no projeto de setup, ela é extremamente flexível. Confira o meu artigo sobre instaladores para aplicativos .NET para saber mais sobre essa ferramenta – InstallShield [novo] – Outra ferramenta que […]

  • avner disse:

    Olá, gostei muito do artigo, mas eu tenho um probleminha a mais, preciso que minha aplicação seja iniciada junto ao windows, você tem alguma dica?
    vlw!

  • Robson disse:

    André boa tarde! Poderia postar como fazer update de baixa em estoque tipo realizar uma venda e abater na quantidade do estoque em VB.Net banco de dados em access

    • andrealveslima disse:

      Olá Robson! O código vai depender muito da arquitetura do seu banco de dados e da arquitetura da sua aplicação.. Será que você poderia passar mais detalhes pra gente poder te ajudar melhor?

      Abraço!
      André Lima

  • Matheus Silvestri disse:

    André, bom dia! Vamos ver se você consegue me ajudar, trabalho em uma multinacional e estou automatizando o versionamento/geração de versão dos softwares deles com jenkins. Existe uma versão de um grande produto deles que é um app para Windows Mobile, desenvolvido no Visual Studio 2008 (sim, bem antigo).. Nunca trabalhei com essa tecnologia, tudo bem novo para mim, e para gerar uma versão do projeto, eu faço build em arquivos csproj (no qual utilizo o installer do MSbuild, e da build perfeito, porém, existem partes do procedimento do projeto que temos que buildar via VS arqvuivos installer, que tem extensão “.vddproj”, porém não consigo achar de maneira alguma como fazer com esse tipo de arquivos no Jenkins, creio que devem ser arquivos que gerem um executável. Instalei um outro pluggin no Jenkins que é o do InstallSchield, porém não compila essa extenção de arquivos também.. Bom, desculpe o longo texto, mas caso saiba algum caminho que eu deva seguir, fico agradecido. Muito obrigado.

    • andrealveslima disse:

      Olá Matheus!

      Cara, infelizmente eu não tenho nenhuma experiência com o Jenkins.. Mas, pelo que pesquisei aqui rapidamente, para fazer o build de vdprojs via linha de comando, você precisa utilizar uma chamada ao executável do Visual Studio (devenv).. Aí depois você coloca esse comando dentro do Jenkins.. Você já tentou algo parecido com isso?

      Veja se este link te ajuda em algo:

      Automating the build of MSI setup packages on Jenkins

      Abraço!
      André Lima

  • […] 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 […]

  • Boa tarde!
    Estou criando um sistema utilizando o Visual Studio 2015 – DevExpress 16.2 – SQL Tabela.MDF.

    1 -Utilizando a Extensão do Install Project para o Visual Studio, ocorre alguns problemas:

    a) A tabela não é incluída automaticamente, foi necessário apontar para o arquivo. Ela foi como somente leitura e o sistema lê os dados mas não grava. CRUD.

    b) A tradução dos componentes do DevExpress também não são lidos pela instalação, deixando alguns aplicativos em inglês.

    • andrealveslima disse:

      Olá Kleber!

      O arquivo MDF está como “somente leitura” no momento da criação do instalador? Até onde eu sei, os atributos de “somente leitura” são mantidos do arquivo de origem.. Ou seja, se o arquivo de origem no computador que está gerando o setup estiver como somente leitura, o arquivo será adicionado no instalador com esse atributo também.. Isso acontece normalmente quando o MDF está armazenado no source control (TFS, por exemplo).. Você já verificou isso?

      E quanto à tradução da DevExpress, eu nunca tive problema.. Depois da instalação a pasta com as traduções (“pt”, por exemplo) foi criada no mesmo diretório da aplicação? Você alterou a cultura de UI da sua aplicação para português (propriedade CurrentUICulture)? Senão, mesmo que a pasta “pt” esteja presente no mesmo diretório da aplicação, ela funcionará respeitando o idioma do sistema operacional (que, se estiver em inglês, manterá a aplicação em inglês também)..

      Abraço!
      André Lima

  • George disse:

    Olá André, muito bom Artigo. Consegui fazer a instalação e coloquei no pacote um DB SQlite. meu problema é que não sei fazer o instalador criar uma pasta para colocar o arquivo do DB separadamente com as permissões de escrita. hoje ele salva na pasta de programas junto com o aplicativo e o acesso lá é so de leitura.
    Pode dar uma dica? Ab

    • andrealveslima disse:

      Olá George, muito obrigado pelo comentário!

      Qual das três opções de instalador você utilizou? Em teoria, qualquer uma das opções suporta a criação de uma pasta separada no sistema de arquivos do usuário.. Só que o jeito de fazer é diferente, por isso a pergunta..

      Entretanto, você não deveria ter tido problema com o banco do SQLite estar no mesmo diretório da aplicação, mesmo estando dentro de arquivos de programas.. Você conferiu e o arquivo do SQLite está como somente leitura mesmo? Ou o problema é de permissão de acesso para o usuário específico?

      Fique atento porque, normalmente, se o arquivo original estiver como somente leitura, ele será adicionado no instalador como somente leitura.. Se esse for o caso, você precisa remover o atributo de somente leitura antes de compilar o instalador.. Esse problema acontece frequentemente quando o arquivo do banco de dados está dentro de algum gerenciador de código fonte (como o TFS, SourceSafe, etc)..

      Abraço!
      André Lima

  • Julianno Garcia disse:

    Tenho uma aplicação Windows Form em C#, esta é uma aplicação um pouco grande, gostaria de saber qual tecnologia uso para atualizar essa aplicação no computador do cliente. Tentei implementar o ClickOnce, mais vi que ele instala o sistema na pasta de usuários e não em arquivos de programas. Alguém conhece alguma plataforma que posso implementar em meu projeto? Minha ideia é de deixar os arquivos atualizados em algum ftp fazendo com que o aplicativo instalado na máquina do cliente verifica se tem atualizações neste “diretório Virtual ou FTP”, se tiver ele baixa esses arquivos. Obrigado

    • andrealveslima disse:

      Olá Julianno!

      Um dos temas que eu vou escrever nos próximos meses é sobre aplicações que se atualizam sozinhas.. Nesse artigo (ou vídeo) eu vou analisar as ferramentas ClickOnce (que você mesmo já testou e viu o resultado), NAppUpdate e AutoUpdater.NET.. A única dessas três que eu já utilizei foi o ClickOnce.. As outras eu ainda vou testar, mas pareceram promissoras.. Se você conseguir testá-las, me avisa os resultados que você obteve..

      Abraço!
      André Lima

  • Felipe disse:

    Quanto tempo demora para gerar o instalador?

    • andrealveslima disse:

      Olá Felipe! Como assim quanto tempo demora para gerar o instalador? Não entendi a sua pergunta.. Depende do tamanho da sua aplicação, da opção de instalador que você escolher, da sua máquina, etc etc.. Você tem que tentar e ver quanto tempo demora no seu caso..

      Abraço!
      André Lima

  • Bruno Manzoli disse:

    Olá André, primeiramente quero lhe dar parabéns pelo grande trabalho.

    Vi este tutorial mas não consegui aplicá-lo especificamente em minha situação. Tenho uma aplicação em .NET C# da qual utiliza um banco externo SQL Server, preciso assim que eu criar o instalador que esse banco seja criado automaticamente no SQL Server, tenho que fazer isso utilizando o Inno Setup e IS Studio. Tem como me ajudar? Será que tem como o Inno Setup executar um Script SQL para mim durante a instalação?

    Grato!

    • andrealveslima disse:

      Olá Bruno, obrigado pelo comentário!

      Tem como o Inno Setup executar um script SQL durante a instalação, sim.. Por exemplo, se você preparar tudo o que tem que ser executado em um arquivo .bat, você pode executá-lo durante a instalação desta maneira:

      HOWTO: Run batch files

      Uma alternativa seria fazer com que a sua aplicação preparasse o banco de dados automaticamente na primeira execução.. Ou talvez restaurar um backup “padrão” do banco de dados na primeira execução.. Eu mostrei essa ideia neste outro artigo (ignore a parte em que eu configuro o Inno Setup para instalar o SQL Server Express automaticamente – no seu caso o SQL Server já está instalado em outro computador, então você não precisa dessa parte):

      Instalando o SQL Server junto com a aplicação

      Abraço!
      André Lima

  • Valdemir Lima disse:

    Olá André,

    Primeiramente parabéns pelo post!
    Queria tirar uma dúvida com você, seguindo o passo a passo que informou consegui implementar o instalador, como consigo efetuar a atualização automática a cada novo instalador, ou seja, se o usuário abrir a aplicação e existir uma atualização, o mesmo atualizar como é feito no Click Once.

    Desde já agradeço a ajuda.

    Abrs

  • Vagner Mello disse:

    De repente apareceu uma demanda, projeto desktop, e esse artigo me ajudou muito. Muito Obrigado!

    • andrealveslima disse:

      Olá Vagner, obrigado pelo comentário! Que legal que o artigo tenha acabado te ajudando nessa demanda.. Qualquer dúvida é só entrar em contato..

      Abraço!
      André Lima

  • Euripedes disse:

    Como eu faço com que o instalar instale substituindo a versão anterior, pois eu modifico o sistema, e gero outro setup, e vou instalar da a seguinte mensagem: “já foi instalada um outra versão desde produto. a instalação desta versão não pode continuar ..”. Estou usando visual studio installer

  • Rafael disse:

    Bom dia André, estou com um problemaço e nao sei resolver: Fui inocente e nao sabia que o arquivo de configuração app.config ficava exposto na pasta de instalação do projeto e neste arquivo contem minha connection string do banco de dados, pois uso dataset tipado e ele pega a conexao de la. Teria como esconder este arquivo da pasta ou fazer alguma criptografia desses dados do arquivo??

    Obrigado!

    • andrealveslima disse:

      Olá Rafael!

      Já respondi a sua dúvida no e-mail que você me mandou, então eu vou colar aqui a mesma resposta, OK?

      O que você pode fazer nesse caso é remover a string de conexão do app.config (não a tag dela, somente o conteúdo), armazená-la em outro lugar de forma criptografada e aí, em tempo de execução, no momento em que a sua aplicação for aberta, você lê essa string de conexão desse outro lugar, remove a criptografia dela e seta o conteúdo em memória, conforme apresentado nesta thread do StackOverflow:

      Change connection string & reload app.config at run time

      Abraço!
      André Lima

  • Matheus Januario disse:

    Olá, estou acompanhando seus artigos e videos, são bons!
    Me surgiram duvidas.
    Desenvolvi um sistema que gera pedido de Veículos, realiza a consulta dos pedidos e impressão. Utilizei VS Community 2015, C# OO, SQL Server 2014 e Report Viewer(aprendi a manipular com vc, obrigado! rsrs).

    Obs:1 Vamos partir do cenário que o Cliente tem 1 server já com sql e 3 terminais
    2 Vamos partir que, Cliente tem somente os 3 terminais

    1) Como vou integrar todos estes componentes no meu instalador?

    2)Recomenda MS Installer Projects, Inno, ou InstallShild ?

    Obrigado pela atenção,abraço!

    • andrealveslima disse:

      Olá Matheus!

      Eu criaria dois instaladores distintos.. Um que instala o client em conjunto com o servidor (inclusive você pode utilizar este artigo meu para criar um instalador que instala automaticamente o SQL Server e faz o restore de um template de banco).. Aí eu criaria outro instalador que só instalaria o client (para os casos em que o cliente já tenha o servidor)..

      Quanto às ferramentas, depende da situação.. O Installer Projects do Visual Studio é bom para instaladores mais simples.. Já o Inno é bem flexível e atende praticamente qualquer tipo de cenário, apesar de ser um pouco mais complicado de utilizar..

      Abraço!
      André Lima

  • Fabiano Silva disse:

    Boa tarde, André Lima!

    Sou Fabiano Silva.
    Estou tendo um problema muito sério com o meu projeto. Eu desenvolvi um jogo de nível intermediário, com banco de dados, que já vem acoplado no próprio Visual Studio 2017. O problema, é que quando eu crio um instalador, ele instala normalmente na minha máquina, e o sistema roda normalmente com todos os recursos. Já quando uso esse instalador em outras máquinas, o problema aparece. O aplicativo roda normalmente, mas o banco de dados não é reconhecido em outra máquina. Como faço para resolver esse problema?

  • Fabio Paes disse:

    André, utilizei o Instalador Padrao do VS, porem sempre que mudo a Versão do Aplicativo, e tento Instalar em uma Máquina que já tem a Versao Anterior Instalada, ele simplemente Instala a Nova Versao e deixa a Versao Anterior instalada. Tem alguma forma de contornar isso? Remover a Versao Anterior e so depois Instalar a Nova?

    Parabens pelo Tutorial, esta 100%. Na verdade só conteudo de Qualidade mesmo. Parabens.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *