Как создать добавить ярлык (.lnk) для моего приложения в папку «Автозагрузка» программно в .NET / C #

Мое приложение будет иметь ярлык запуска для каждой машины (не для пользователя). Я могу создать ярлык во время процесса установки без проблем. Моя проблема возникает, когда пользователь позже удаляет его, а затем пытается повторно включить. Другими словами, они отключают RunOnStartup (который удаляет чернила при запуске) и позднее решают, что хотят, чтобы он запускался при запуске, поэтому возвращаются в настройки и снова включаются.

По-видимому, это довольно распространенная проблема с .NET, которая не является родным способом создания ярлыков. Но так и не нашли очень хорошего решения.

Решения, которые я нашел / рассмотрел:

Rather then create a shortcut. Just copy one. This might be a good solution. I can't depend on there being a Start Menu link. But, I guess I could probably create one and keep it in Program Directory... This shifts the problem over to my installer to have to create the shortcut with the appropriate path which would be specified at install time.

Do what this other stackoverflow answer is and use a COM wrapper object. I'd like to avoid COM. It was also written in 2003. So, I'm not sure how well it's going to support vista. I'd give it a shot but don't have a vista box handy.

Use the registry instead. This is how I currently do it... but run into issues on Vista. It seems the general consensus that Startup Menu shortcuts are the proper way to do this so that's what my goal is.

Кроме того, мне приходится обрабатывать случай, когда обычный пользователь (не администратор) пытается изменить это предпочтение. В этом случае мне нужно изящно завершить работу или, в случае перспективы, позволить пользователю ввести пароль администратора, чтобы получить маркер безопасности администратора. Ответ, который уже должным образом учитывает этот случай, был бы потрясающим.

Я прошу прощения, если эта тема уже была рассмотрена. Я искал вокруг, прежде чем писать.

UPDATE: Копирование ярлыка, созданного вашим установщиком, является лучшим решением. Я опубликую код после завершения ... столкнулся с некоторыми препятствиями при наличии a) Environment.GetSpecialFolder, не имеющего ссылку на StartMenu, которая была решена ... Но теперь я имею дело с повышением разрешений для копирования файла в правильное местоположение. Я создал новый вопрос stackoverflow для этой темы:Как я могу скопировать файл как «Стандартный пользователь»? в Vista (т. е. «Приложение административного выбора»), запрашивая у пользователя учетные данные администратора?

Ответы на вопрос(4)

Ваш ответ на вопрос