¿Cómo creo agregar un acceso directo (.lnk) para mi aplicación a la carpeta de Inicio programáticamente en .NET / C #?

Mi aplicación tendrá un acceso directo de inicio por máquina (no por usuario). Puedo crear un acceso directo durante el proceso del instalador sin ningún problema. Mi problema viene cuando el usuario lo elimina más tarde y luego intenta volver a habilitarlo. En otras palabras, desactivan RunOnStartup (que elimina la tinta de inicio) y más tarde deciden que quieren que se ejecute en el inicio para que vuelvan a las preferencias y se vuelvan a habilitar.

Aparentemente, esta es una queja bastante común con .NET de que no hay una forma nativa de crear accesos directos. Pero, no he encontrado una muy buena solución.

Soluciones que he encontrado / considerado:

En lugar de crear un atajo. Sólo copia uno. Esta podría ser una buena solución. No puedo depender de que haya un enlace del Menú de Inicio. Pero, creo que probablemente podría crear uno y guardarlo en el Directorio de programas ... Esto transfiere el problema a mi instalador para que tenga que crear el acceso directo con la ruta adecuada que se especificaría en el momento de la instalación.

Hacer quéesta otra respuesta de stackoverflow es y utiliza un objeto contenedor COM. Me gustaría evitar la COM. También fue escrito en 2003. Entonces, no estoy seguro de qué tan bien va a soportar Vista. Le daría una oportunidad, pero no tengo una caja de vista a mano.

Utilice el registro en su lugar. Así es como lo hago actualmente ... pero tengo problemas con Vista. Parece el consenso general de que los accesos directos del Menú de Inicio son la forma correcta de hacerlo, así que ese es mi objetivo.

Además, tengo que manejar el caso de que un usuario regular (no un administrador) intente cambiar esta preferencia. En este caso, debo fallar con gracia o, en el caso de Vista, permitir que el usuario ingrese la contraseña de administrador para obtener un token de seguridad de administrador. Una respuesta que ya tenga en cuenta este caso sería impresionante.

Pido disculpas si este tema ya ha sido cubierto. Busqué alrededor antes de publicar.

ACTUALIZAR: Copiar un acceso directo que haya creado su instalador es la mejor solución. Publicaré el código una vez que termine ... me encontré con algunos obstáculos con a) Environment.GetSpecialFolder que no tiene una referencia al StartMenu que se ha resuelto ... Pero, ahora estoy tratando de elevar los permisos para copiar el archivo al ubicación adecuada. Creé una nueva pregunta de stackoverflow para este tema:¿Cómo puedo copiar un archivo como "Usuario estándar" en Vista (es decir, "Una aplicación de elección administrativa") solicitando al usuario las credenciales de administrador?

Respuestas a la pregunta(4)

Su respuesta a la pregunta