Добавить в автозагрузку

Дата: 3.12.2009
Категории: Visual Studio (C#) WinForms WPF

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

Немного теории

Я надеюсь, что все знают как добавить вручную приложение в автозапуск через редактор реестра. Перед тем как писать код, нужно четко представлять, как это делается вручную.

Итак, запускаем стандартное приложение ОС для работы с реестром. Это должны знать все, но все же чтобы это смог сделать каждый кратко опишу. Либо C:\Windows\regedit.exe, либо Пуск -> Выполнить, написать в поле regedit, нажать ОК.

Открылся редактор реестра. Переходим по ветке HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

Раздел Run содержит строковые параметры которые содержат пути к запускаемым приложениям. Т.е. если создать строковый параметр а в качестве его значения написать полный путь до программы, то при запуске ОС это приложение автоматически запустится.

Практика

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

Код предельно прост. Опишем константу, в которой будет имя создаваемого параметра в разделе Run

const string name = "MyTestApplication";

Далее нужно добавить пространство имен. В нем содержатся класс RegistryKey для работы с реестром.

using Microsoft.Win32;

Теперь напишем функцию, которая будет получать параметр типа bool. Если передадим True то приложение добавится в автозагрузку, иначе удалится.

public bool SetAutorunValue(bool autorun)
{
    string ExePath = System.Windows.Forms.Application.ExecutablePath;
    RegistryKey reg;
    reg = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\");
    try
    {
        if (autorun)
            reg.SetValue(name, ExePath);
        else
            reg.DeleteValue(name);

        reg.Close();
    }
    catch
    {
        return false;
    }
    return true;
}

Теперь о том как это работает. Сначала в переменную ExePath получаем путь до исполняемого файла приложения. Затем создаем класс RegistryKey и переходим к разделу Run. Дальше производим анализ переданного в функцию параметра autorun. Если true, то нужно будет создать параметр с именем name и значением ExePath. Тем самым при запуске Windows, приложение будет запускаться. Если autorun = false, то нужно будет просто удалить параметр с именем name. После этого нужно будет вызвать метод Close(), для того чтобы закрыть раздел и записать его на диск.

Функция возвращает True в случае успешного добавления программы в автозагрузку и False в случае ошибки.

Осталось только вызвать функцию SetAutorunValue(). Например, выложите 2 кнопки на форму. При нажатии на одну выполните код

SetAutorunValue(true);

При нажатии на другую

SetAutorunValue(false);

Таким образом, одна кнопка будет добавлять в автозагрузку, другая убирать из автозагрузки программу.

Коментарии:

  1. 14.09.2010 в 15:57

    Спасибо, попробовал, все работает, понятно все расписано!!!

  2. 29.05.2011 в 16:35

    Так и есть, мотаю на ус=). Благодарю.

  3. 30.05.2012 в 23:54

    Спасибо, помогло 🙂

  4. 01.06.2012 в 09:10

    Спаасибо) полезная информация)

  5. 17.08.2012 в 17:33

    Огромное спасибо! Лучшая статья из тех, что прочел по автозагрузке! Все очень хорошо расписано.

  6. 06.11.2017 в 22:30

    после запуска предложения появляются messagebox наколка секунд загружается и становится…!

  7. 28.11.2017 в 02:11

    Прекращает работу или что?

  8. 07.08.2018 в 01:37

    Запускаемое приложение не находит свои файлы в своей папке, так как текущая папка получается C:\Windows\system32\. Надо как-то указать переход в папку с программой. ?????

  9. 28.08.2018 в 02:21

    Приложение случайно не в портейбл-версии?