Como faço para criar adicionar um atalho (.lnk) para o meu aplicativo para a pasta de inicialização programaticamente no .net / c #

Meu aplicativo terá um atalho de inicialização por máquina (não por usuário). Eu posso criar um atalho durante o processo de instalação não há problema. Meu problema surge quando o usuário mais tarde o remove e, em seguida, tenta reativá-lo. Em outras palavras, eles desativam o RunOnStartup (que exclui a tinta de inicialização) e, posteriormente, decidem que querem que ele seja executado na inicialização, para que eles voltem às preferências e reativem.

Aparentemente, esta é uma queixa muito comum com o .NET que não existe uma maneira nativa de criar atalhos. Mas não encontrei uma solução muito boa.

Soluções que encontrei / considerei:

Em vez disso, crie um atalho. Apenas copie um. Isso pode ser uma boa solução. Eu não posso depender de haver um link no menu Iniciar. Mas, eu acho que provavelmente poderia criar um e mantê-lo no Diretório de Programas ... Isso muda o problema para o meu instalador ter que criar o atalho com o caminho apropriado que seria especificado no momento da instalação.

Fazer o queesta outra resposta stackoverflow é e usa um objeto wrapper COM. Eu gostaria de evitar COM. Também foi escrito em 2003. Então, não tenho certeza de quão bem ele vai suportar o Vista. Eu daria um tiro, mas não tenho uma caixa de vista à mão.

Use o registro em vez disso. É assim que eu faço atualmente ... mas tenho problemas no Vista. Parece que o consenso geral de que os atalhos do menu de inicialização são a maneira correta de fazer isso, então é isso que meu objetivo é.

Além disso, tenho que lidar com o caso em que um usuário normal (não um administrador) tenta alterar essa preferência. Neste caso, eu preciso graciosamente falhar ou, no caso do Vista, permitir que o usuário digite a senha do administrador para obter um token de segurança do administrador. Uma resposta que já considere corretamente este caso seria incrível.

Peço desculpas se este tópico já foi abordado. Eu procurei por aí antes de postar.

ATUALIZAR: Copiar um atalho criado pelo seu instalador é a melhor solução. Vou postar código uma vez terminado ... encontrei alguns obstáculos com a) Environment.GetSpecialFolder não tendo uma referência ao StartMenu que foi resolvido ... Mas, agora estou lidando com elevação de permissões para copiar o arquivo para o localização apropriada. Eu criei uma nova pergunta sobre stackoverflow para este tópico:Como posso copiar um arquivo como um "Usuário padrão" no Vista (ou seja, "Um aplicativo de escolha administrativa") solicitando credenciais de administrador do usuário?

questionAnswers(4)

yourAnswerToTheQuestion