Создавая то или иное приложение для своих нужд (да и не только своих), зачастую хочется добавить его в автозапуск системы. Ведь зачем тратить время на постоянный ручной запуск программы, если это можно автоматизировать. Конечно, вполне можно обойтись ручным перетаскиванием нашего ярлыка в папку «Автозагрузка» меню «Пуск»… но мы не ищем легких путей, и поэтому я расскажу как заставить программу самой добавлять себя в автостарт системы.
По сути существует два основных способа добавления программы в автозапуск. И у первого способа и у второго есть свои плюсы и минусы, поэтому каждый выбирает способ по душе.
Способ первый. Реестр. Автозапуск программы в реестре может быть прописан в 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");