20 октября 2015
Кравченко Виктор

Как программно добавить приложение в автозагрузку

VB.NET Полезные функции Windows Desktop .NET
01

Функционал автозагрузки реализуется 2 путями:

02
  • посредством внесения специальной записи в реестр,
  • посредством создания ярлыка в папке Автозагрузка (Startup) (меню Пуск).
03

Реестр.

Речь идет о создании ключа реестра в разделах:

04
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run — для всех пользователей (для создания ключа в этом разделе понадобятся права администратора — для Windows 7 и выше),
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run — только для текущего пользователя.
05

В реализации этого пути нет ничего сложного, класс-обертка:

06 VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Public Class AppConfig Shared autorunRegPath As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
Public Shared Function SetAutorun(Autorun As Boolean, Optional IsCurrentUser As Boolean = True) As Boolean Dim regkeyAutorun As Microsoft.Win32.RegistryKey = GetRegistryKey(IsCurrentUser) Try If Autorun Then regkeyAutorun.SetValue(Application.ProductName, Application.ExecutablePath) Else regkeyAutorun.DeleteValue(Application.ProductName) End If regkeyAutorun.Close() Return True Catch ex As Exception MsgBox(ex.ToString) End Try Return False End Function
Public Shared ReadOnly Property GetAutorunState(Optional IsCurrentUser As Boolean = True) As Boolean Get Dim regkeyAutorun As Microsoft.Win32.RegistryKey = GetRegistryKey(IsCurrentUser) Try Dim value As Object = regkeyAutorun.GetValue(Application.ProductName) If value IsNot Nothing Then If value = Application.ExecutablePath Then Return True Else Dim result As DialogResult = MsgBox("Найден ключ автозапуска для одноименного приложения расположенного в другом месте." + _ vbNewLine + value.ToString + vbNewLine + "Удалить?", vbYesNo) If result = DialogResult.Yes Then regkeyAutorun.DeleteValue(Application.ProductName) End If End If Catch ex As Exception MsgBox(ex.ToString) End Try Return False End Get End Property
Private Shared Function GetRegistryKey(Optional IsCurrentUser As Boolean = True) As Microsoft.Win32.RegistryKey Dim regkeyAutorun As Microsoft.Win32.RegistryKey If IsCurrentUser Then regkeyAutorun = My.Computer.Registry.CurrentUser.OpenSubKey(autorunRegPath, True) Else ' Если программа запущена не с правами администратора, то здесь выпадет ошибка regkeyAutorun = My.Computer.Registry.LocalMachine.OpenSubKey(autorunRegPath, True) End If Return regkeyAutorun End Function
End Class
07

Поскольку функции работы с реестром объявлены как Shared, то для их использования не нужно создавать экземпляр класса AppConfig:

08 VB.NET
1
2
3
4
5
6
7
8
9
10
Private Sub ShowConfigForm() Dim frm As New frmConfig ' Форма с настройками Dim autoRun As Boolean = AppConfig.GetAutorunState() ' Запоминаем во временную переменную состояние реестра frm.chkStartWithWin.Checked = autoRun If frm.ShowDialog = Windows.Forms.DialogResult.OK Then If autoRun <> frm.chkStartWithWin.Checked Then AppConfig.SetAutorun(autoRun) End If End Sub
09

Папка Автозагрузка (Startup), меню Пуск.

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

11

Похожие запросы:

  • Как добавить программу в автозагрузку через реестр
  • Как добавить программу в Автозапуск — Visual Basic .NET
  • Как создать програмно автозагрузку конкретному пользователю через реестр? — Visual Basic .NET
  • Методы автозапуска программ в среде Windows
  • Добавление программы в автозагрузку
  • Автозапуск — VB.NET
  • Как добавить файл *.exe в автозагрузку с помощью VB?
  • Как создать ярлык/иконку для exe-шника
comments powered by HyperComments