步骤1:添加注册表操作类

在项目中新建一个类文件 AutoStartHelper.vb,粘贴以下代码:

Imports Microsoft.Win32
Imports System.IO

Public Class AutoStartHelper
    Private Const RunRegistryKey As String = "Software\Microsoft\Windows\CurrentVersion\Run"
    Private Shared ReadOnly AppName As String = "MyApplicationName" ' 自定义应用标识名'

    ''' <summary>
    ''' 获取当前程序路径(自动处理空格)
    ''' </summary>
    Public Shared ReadOnly Property AppPath As String
        Get
            Return """" & Application.ExecutablePath & """"
        End Get
    End Property

    ''' <summary>
    ''' 启用/禁用自启动
    ''' </summary>
    Public Shared Sub SetAutoStart(enable As Boolean)
        Try
            Using key = Registry.CurrentUser.OpenSubKey(RunRegistryKey, True)
                If enable Then
                    key.SetValue(AppName, AppPath)
                Else
                    key.DeleteValue(AppName, False)
                End If
            End Using
        Catch ex As Exception
            MessageBox.Show($"操作注册表失败: {ex.Message}")
        End Try
    End Sub

    ''' <summary>
    ''' 检查当前自启动状态
    ''' </summary>
    Public Shared Function IsAutoStartEnabled() As Boolean
        Try
            Using key = Registry.CurrentUser.OpenSubKey(RunRegistryKey, False)
                Dim value = key.GetValue(AppName)
                Return value IsNot Nothing AndAlso value.ToString() = AppPath
            End Using
        Catch ex As Exception
            Return False
        End Try
    End Function
End Class

步骤2:创建设置界面

在窗体设计器中添加控件:

  1. 添加一个 CheckBox 控件,Name属性设为 chkAutoStart
  2. 添加一个 Button 控件,Name属性设为 btnSave,Text设为 "保存设置"

窗体代码 Form1.vb

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' 窗体加载时更新复选框状态'
        chkAutoStart.Checked = AutoStartHelper.IsAutoStartEnabled()
    End Sub

    Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
        ' 保存设置时应用选择'
        AutoStartHelper.SetAutoStart(chkAutoStart.Checked)
        MessageBox.Show("设置已保存,重启后生效")
    End Sub

    Private Sub chkAutoStart_CheckedChanged(sender As Object, e As EventArgs) Handles chkAutoStart.CheckedChanged
        ' 实时显示状态文本'
        lblStatus.Text = If(chkAutoStart.Checked, "已启用开机自启动", "已禁用开机自启动")
    End Sub
End Class

步骤3:添加状态标签(可选)

在窗体上添加一个 Label 控件:

  • Name属性设为 lblStatus
  • Text属性清空
  • AutoSize设为True

步骤4:添加管理员权限支持(如果需要全局设置)

  1. 右键项目 -> 添加 -> 新建项 -> 应用程序清单文件
  2. 找到并修改清单文件中的 <requestedExecutionLevel> 节点:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

项目结构示意图

你的项目
├── Form1.vb          (主窗体)
├── AutoStartHelper.vb (注册表操作类)
├── app.manifest      (权限配置文件)
└── My Project
    └── Application.myapp

使用说明

  1. 程序启动时会自动检测当前自启动状态
  2. 用户通过复选框切换启用/禁用状态
  3. 点击"保存设置"按钮应用更改
  4. 状态标签会实时显示当前设置状态

扩展建议

  1. 添加设置持久化(使用 My.Settings 保存用户偏好)
  2. 实现自动检测程序路径变化
  3. 添加UAC盾牌图标(管理员模式时显示)
  4. 支持多用户/全局设置切换

完整项目可通过以下方式验证:

  1. 运行程序并勾选复选框
  2. 打开注册表编辑器定位到: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
  3. 查看是否存在对应的注册表项
  4. 重启系统验证程序是否自启动