none
Por que atalho gerado pelo setup abre uma tela de instalação - não abre o executável do sistema RRS feed

  • Pergunta

  • Olá crie um projeto do tipo setup que gera um atalho para o executável do sistema, mas toda vez que clico no atalho antes abrir o sistema é aberto uma tela de instalação como se fosse instalar ou atualizar alguma coisa. Se crio um atalho manualmente para o executável isto não acontece. Como faço para que o atalho criado pelo setup project abra o sistema direto sem abrir esta tela de instalação?
    Paulo Moreira
    terça-feira, 8 de fevereiro de 2011 17:18

Respostas

  • Oi Paulo

    Dá uma verificada se o atalho que foi criado está realmente apontando para o arquivo EXE que o teu instalador instalou. Por exemplo, se o teu Executável foi instalado na pasta C:\Program Files\AppDoPaulo\sistema.exe, e o teu atalho está apontando para um arquivo inexistente, como, por exemplo C:\Program Files\sistema.exe, o Windows Installer percebe a inexistência do arquivo e tenta recuperá-lo do pacote de instalação. Mas se for problema na definição do atalho no Projeto de Instalação, ele nunca vai encontrar o arquivo, e sempre que o atalho for executado, o Windows Installer tentará recuperá-lo. 

    É possível que, mesmo o atalho estando apontando para uma pasta/arquivo inexistente, o Windows consiga abrir o arquivo, pois ele faz uma pesquisa e encontra o executável com o mesmo nome em outra pasta e considera o programa que o usuário deseja abrir. Por isso, podes ficar suspeitando que o Instalador faz alguma coisa que permite a abertura do sistema, mas, na verdade, é um erro no projeto de instalação.

    Espero não ter complicado muito a explicação. 

    Sds.,


    Daniel Ethur Porto Alegre/RS
    • Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 15 de fevereiro de 2011 12:01
    • Marcado como Resposta AndreAlvesLimaModerator quinta-feira, 24 de fevereiro de 2011 21:50
    • Não Marcado como Resposta paulo3011 segunda-feira, 28 de fevereiro de 2011 20:34
    • Marcado como Resposta paulo3011 segunda-feira, 28 de fevereiro de 2011 22:46
    sexta-feira, 11 de fevereiro de 2011 19:10
  • Encontrei um tópico que explica o que acontece:

    http://social.msdn.microsoft.com/Forums/en/winformssetup/thread/f5fa6d83-9d7e-440c-a47e-3c64c9e6e269

    De acordo com a explicação postada aqui, o atalho gerado pelo setup project do visual studio é diferente do atalho criado manualmente, o atalho criado pelo visual studio cria um atalho do tipo "Primary output Shortcut " e não um "File shortcut "

    achei uma outra resposta em: http://stackoverflow.com/questions/234231/creating-application-shortcut-in-a-directory

    estou fazendo testes com a classe: http://vbaccelerator.com/home/NET/Code/Libraries/Shell_Projects/Creating_and_Modifying_Shortcuts/ShellLink_Code.asp e até agora ela criou os atalhos corretamente.


    Paulo Moreira

    Usando a classe ShellLink citada acima eu fiz o seguinte:

        /// <summary>
        /// Cria um atalho na máquina.
        /// </summary>
        /// <param name="nomeAtalho">Nome que será dado ao arquivo de atalho</param>
        /// <param name="destinoAtalho">Path do diretório onde será salvo o atalho</param>
        /// <param name="pathToExecutavel">Path para o executável</param>
        private void CriaAtalho(string nomeAtalho, string destinoAtalho, string pathToExecutavel)
        {
          destinoAtalho += @"\" + nomeAtalho + ".lnk";
          MessageBox.Show("Vai criar Atalho em: " + destinoAtalho + "\n com o nome de: " + nomeAtalho + "\nQue chama: " + pathToExecutavel);
    
          using (ShellLink shortcut = new ShellLink())
          {
            shortcut.Target = pathToExecutavel;
            shortcut.WorkingDirectory = pathToExecutavel;
            shortcut.Description = nomeAtalho;
            shortcut.DisplayMode = ShellLink.LinkDisplayMode.edmMaximized;
            shortcut.Save(destinoAtalho);
          }
        }
    

    exemplo de uso:

    string pathToExecutavel = @"C:\Program Files\MeuPrograma\meuprograma.exe";
    CriaAtalho("MeuPrograma", Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),pathToExecutavel);
    

    caso precise elavar a permissão do programa que vai executar o código acima faça o seguinte:

    1) Abra o bloco de notas e adicione o xml abaixo:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
     <assemblyIdentity version="1.0.0.0"
       processorArchitecture="X86"
       name="IsUserAdmin"
       type="win32"/> 
     <description>Description of your application</description> 
     <!-- Identify the application security requirements. -->
     <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
      <security>
       <requestedPrivileges>
        <requestedExecutionLevel
         level="requireAdministrator"
         uiAccess="false"/>
        </requestedPrivileges>
        </security>
     </trustInfo>
    </assembly>
    
    2) Salve com o seguinte nome: [nome do seu executável].exe.manifest


    Paulo Moreira
    • Marcado como Resposta paulo3011 terça-feira, 1 de março de 2011 13:47
    terça-feira, 1 de março de 2011 13:46
  • Encontrei um tópico que explica o que acontece:

    http://social.msdn.microsoft.com/Forums/en/winformssetup/thread/f5fa6d83-9d7e-440c-a47e-3c64c9e6e269

    De acordo com a explicação postada aqui, o atalho gerado pelo setup project do visual studio é diferente do atalho criado manualmente, o atalho criado pelo visual studio cria um atalho do tipo "Primary output Shortcut " e não um "File shortcut "

    achei uma outra resposta em: http://stackoverflow.com/questions/234231/creating-application-shortcut-in-a-directory

    estou fazendo testes com a classe: http://vbaccelerator.com/home/NET/Code/Libraries/Shell_Projects/Creating_and_Modifying_Shortcuts/ShellLink_Code.asp e até agora ela criou os atalhos corretamente.


    Paulo Moreira
    • Marcado como Resposta paulo3011 segunda-feira, 28 de fevereiro de 2011 22:46
    segunda-feira, 28 de fevereiro de 2011 21:25

Todas as Respostas

  • Oi Paulo

    Dá uma verificada se o atalho que foi criado está realmente apontando para o arquivo EXE que o teu instalador instalou. Por exemplo, se o teu Executável foi instalado na pasta C:\Program Files\AppDoPaulo\sistema.exe, e o teu atalho está apontando para um arquivo inexistente, como, por exemplo C:\Program Files\sistema.exe, o Windows Installer percebe a inexistência do arquivo e tenta recuperá-lo do pacote de instalação. Mas se for problema na definição do atalho no Projeto de Instalação, ele nunca vai encontrar o arquivo, e sempre que o atalho for executado, o Windows Installer tentará recuperá-lo. 

    É possível que, mesmo o atalho estando apontando para uma pasta/arquivo inexistente, o Windows consiga abrir o arquivo, pois ele faz uma pesquisa e encontra o executável com o mesmo nome em outra pasta e considera o programa que o usuário deseja abrir. Por isso, podes ficar suspeitando que o Instalador faz alguma coisa que permite a abertura do sistema, mas, na verdade, é um erro no projeto de instalação.

    Espero não ter complicado muito a explicação. 

    Sds.,


    Daniel Ethur Porto Alegre/RS
    • Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 15 de fevereiro de 2011 12:01
    • Marcado como Resposta AndreAlvesLimaModerator quinta-feira, 24 de fevereiro de 2011 21:50
    • Não Marcado como Resposta paulo3011 segunda-feira, 28 de fevereiro de 2011 20:34
    • Marcado como Resposta paulo3011 segunda-feira, 28 de fevereiro de 2011 22:46
    sexta-feira, 11 de fevereiro de 2011 19:10
  • Oi Paulo

    Dá uma verificada se o atalho que foi criado está realmente apontando para o arquivo EXE que o teu instalador instalou. Por exemplo, se o teu Executável foi instalado na pasta C:\Program Files\AppDoPaulo\sistema.exe, e o teu atalho está apontando para um arquivo inexistente, como, por exemplo C:\Program Files\sistema.exe, o Windows Installer percebe a inexistência do arquivo e tenta recuperá-lo do pacote de instalação. Mas se for problema na definição do atalho no Projeto de Instalação, ele nunca vai encontrar o arquivo, e sempre que o atalho for executado, o Windows Installer tentará recuperá-lo. 

    É possível que, mesmo o atalho estando apontando para uma pasta/arquivo inexistente, o Windows consiga abrir o arquivo, pois ele faz uma pesquisa e encontra o executável com o mesmo nome em outra pasta e considera o programa que o usuário deseja abrir. Por isso, podes ficar suspeitando que o Instalador faz alguma coisa que permite a abertura do sistema, mas, na verdade, é um erro no projeto de instalação.

    Espero não ter complicado muito a explicação. 

    Sds.,


    Daniel Ethur Porto Alegre/RS

    Olá Daniel, verifiquei o atalho gerado e realmente ele não aponta corretamente para o meu executável, mas o problema é que estou gerando este atalho pelo visual studio é ele quem seta este caminho e tb não me da opção para inserir este valor na forma de string.

    Vou tentar explicar de forma mais detalhada, eu segui +- os seguintes passos:

    1) Criei um projeto do tipo Setup Project

    2) Na aba File System, clique na pasta "application folder" e adicione o meu executável

    3) Na aba File System, clique na pasta "User's programs menu" , adicione uma pasta com o nome do meu sistema e em seguida adicione um atalho nesta pasta.

    4) Clicando sobre o atalho e visualizando suas propriedades existem três propriedades relacionadas com o executável, são elas:

    - Folder (É preenchido automaticamente com o nome da pasta onde o atalho será criado -> "User's programs menu/Nome do sistema/" )

    - Target (Selecionei o executável que está dentro da pasta "application folder" )

    - WorkingFolder (é selecionado automaticamente a pasta "application folder")

    Após gerar o instalador e executá-lo, é gerado no menu iniciar o menu que criei "programas/nome do sistema/atalho.exe", mas o atalho não aponta para o caminho onde meu sistema foi instalado. Quando clico com o botão direito do sobre o atalho para visualizar as suas propriedades, em "Destino" aparece o mesmo nome da pasta que criei em "User's programs menu " -> "Nome do sistema ". Não sei porque isto acontece, to achando que este atalho terá que ser criado via código...
    Paulo Moreira
    segunda-feira, 28 de fevereiro de 2011 21:03
  • Encontrei um tópico que explica o que acontece:

    http://social.msdn.microsoft.com/Forums/en/winformssetup/thread/f5fa6d83-9d7e-440c-a47e-3c64c9e6e269

    De acordo com a explicação postada aqui, o atalho gerado pelo setup project do visual studio é diferente do atalho criado manualmente, o atalho criado pelo visual studio cria um atalho do tipo "Primary output Shortcut " e não um "File shortcut "

    achei uma outra resposta em: http://stackoverflow.com/questions/234231/creating-application-shortcut-in-a-directory

    estou fazendo testes com a classe: http://vbaccelerator.com/home/NET/Code/Libraries/Shell_Projects/Creating_and_Modifying_Shortcuts/ShellLink_Code.asp e até agora ela criou os atalhos corretamente.


    Paulo Moreira
    • Marcado como Resposta paulo3011 segunda-feira, 28 de fevereiro de 2011 22:46
    segunda-feira, 28 de fevereiro de 2011 21:25
  • Encontrei um tópico que explica o que acontece:

    http://social.msdn.microsoft.com/Forums/en/winformssetup/thread/f5fa6d83-9d7e-440c-a47e-3c64c9e6e269

    De acordo com a explicação postada aqui, o atalho gerado pelo setup project do visual studio é diferente do atalho criado manualmente, o atalho criado pelo visual studio cria um atalho do tipo "Primary output Shortcut " e não um "File shortcut "

    achei uma outra resposta em: http://stackoverflow.com/questions/234231/creating-application-shortcut-in-a-directory

    estou fazendo testes com a classe: http://vbaccelerator.com/home/NET/Code/Libraries/Shell_Projects/Creating_and_Modifying_Shortcuts/ShellLink_Code.asp e até agora ela criou os atalhos corretamente.


    Paulo Moreira

    Usando a classe ShellLink citada acima eu fiz o seguinte:

        /// <summary>
        /// Cria um atalho na máquina.
        /// </summary>
        /// <param name="nomeAtalho">Nome que será dado ao arquivo de atalho</param>
        /// <param name="destinoAtalho">Path do diretório onde será salvo o atalho</param>
        /// <param name="pathToExecutavel">Path para o executável</param>
        private void CriaAtalho(string nomeAtalho, string destinoAtalho, string pathToExecutavel)
        {
          destinoAtalho += @"\" + nomeAtalho + ".lnk";
          MessageBox.Show("Vai criar Atalho em: " + destinoAtalho + "\n com o nome de: " + nomeAtalho + "\nQue chama: " + pathToExecutavel);
    
          using (ShellLink shortcut = new ShellLink())
          {
            shortcut.Target = pathToExecutavel;
            shortcut.WorkingDirectory = pathToExecutavel;
            shortcut.Description = nomeAtalho;
            shortcut.DisplayMode = ShellLink.LinkDisplayMode.edmMaximized;
            shortcut.Save(destinoAtalho);
          }
        }
    

    exemplo de uso:

    string pathToExecutavel = @"C:\Program Files\MeuPrograma\meuprograma.exe";
    CriaAtalho("MeuPrograma", Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),pathToExecutavel);
    

    caso precise elavar a permissão do programa que vai executar o código acima faça o seguinte:

    1) Abra o bloco de notas e adicione o xml abaixo:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
     <assemblyIdentity version="1.0.0.0"
       processorArchitecture="X86"
       name="IsUserAdmin"
       type="win32"/> 
     <description>Description of your application</description> 
     <!-- Identify the application security requirements. -->
     <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
      <security>
       <requestedPrivileges>
        <requestedExecutionLevel
         level="requireAdministrator"
         uiAccess="false"/>
        </requestedPrivileges>
        </security>
     </trustInfo>
    </assembly>
    
    2) Salve com o seguinte nome: [nome do seu executável].exe.manifest


    Paulo Moreira
    • Marcado como Resposta paulo3011 terça-feira, 1 de março de 2011 13:47
    terça-feira, 1 de março de 2011 13:46