C#: Добавить программу в автозагрузку

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

По сути существует два основных способа добавления программы в автозапуск. И у первого способа и у второго есть свои плюсы и минусы, поэтому каждый выбирает способ по душе.

Способ первый. Реестр. Автозапуск программы в реестре может быть прописан в 2х местах. 1 — отвечает за данный компьютер в целом и раcполагается по пути HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, 2 — отвечает за текущего пользователя системы и располагается по пути HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run. Для добавления приложения в автозагрузку достаточно прописать в любой из этих разделов запись «Имя программы» = «Путь к exe». Однако сразу стоит отметить, что во первых в Windows Vista\7 вариант с HKEY_LOCAL_MACHINE будет работать лишь при запуске программы под админом. А во вторых, что автозапуск программы будет подрузомевать рабочую директорию вашего пользователя (например для ХР это C:\Documents and Settings\UserName), как следствие, если используются дополнительные файлы, то возможны проблемы. Решением данной проблемы является хранение в реестре настоящей рабочей директории программы и ее считывание при запуске.

Способ второй. Создание ярлыка в папке автозагрузка. Я предпочитаю данный метод, хоть возможно он и не совсем правильный. Но простой, удобный и работает везде без дополнительных проверок. В C# создание ярлыков реализовывается с помощью COM объектов. Для начала нужно подключить в ссылки во вкладе COM следующую dll: Interop.IWshRuntimeLibrary.dll. Далее прописываем:

using IWshRuntimeLibrary;

И собственно описываем саму функцию создания ярлыка:

private void CreateShortCut(string FilePath, string WorkDir, string SaveTo)
{
  var WshShell = new WshShellClass();
  IWshRuntimeLibrary.IWshShortcut MyShortcut;
  MyShortcut = (IWshRuntimeLibrary.IWshShortcut)WshShell.CreateShortcut(SaveTo);
  //путь к exe
  MyShortcut.TargetPath = FilePath;
  MyShortcut.Description = "Запуск";
  //рабочая диреткория
  MyShortcut.WorkingDirectory = WorkDir;
  MyShortcut.Save();
}


Создание ярлыка в автозагрузке выглядит так:

CreateShortCut(Application.ExecutablePath, Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf('\\')), Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\ExeName.lnk");
Запись опубликована в рубрике C# с метками , , , , . Добавьте в закладки постоянную ссылку.