Usuário com melhor resposta
Por que atalho gerado pelo setup abre uma tela de instalação - não abre o executável do sistema

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
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
-
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 MoreiraUsando 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:
2) Salve com o seguinte nome: [nome do seu executável].exe.manifest<?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>
Paulo Moreira- Marcado como Resposta paulo3011 terça-feira, 1 de março de 2011 13:47
-
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
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
-
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 -
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
-
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 MoreiraUsando 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:
2) Salve com o seguinte nome: [nome do seu executável].exe.manifest<?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>
Paulo Moreira- Marcado como Resposta paulo3011 terça-feira, 1 de março de 2011 13:47