Skip to content

Latest commit

 

History

History
137 lines (94 loc) · 3.13 KB

File metadata and controls

137 lines (94 loc) · 3.13 KB

开机自启动功能

功能说明

Launcher 启动时会自动将自己添加到 Windows 注册表,设置开机自启动。用户无需手动配置,Launcher 会在系统启动时自动运行。

实现原理

注册表位置

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

注册表项

  • 项名EVS Launcher
  • 项值:launcher.exe 的完整路径

工作流程

  1. Launcher 启动

    • 用户运行 launcher.exe
  2. 自动注册

    • trayOnReady() 函数在托盘初始化时调用 registry.SetAutoStart("EVS Launcher")
    • 自动将 launcher.exe 路径写入注册表
  3. 开机自启动

    • 系统启动时,Windows 会自动读取 Run 键下的所有项
    • 自动启动 launcher.exe

相关代码

核心模块:internal/registry/autostart.go

提供三个函数:

1. SetAutoStart(appName string) error

设置应用开机自启动

// 示例
if err := registry.SetAutoStart("EVS Launcher"); err != nil {
    log.Printf("设置开机自启动失败: %v", err)
}

2. RemoveAutoStart(appName string) error

移除应用开机自启动

// 示例
if err := registry.RemoveAutoStart("EVS Launcher"); err != nil {
    log.Printf("移除开机自启动失败: %v", err)
}

3. IsAutoStartEnabled(appName string) (bool, error)

检查应用是否已设置开机自启动

// 示例
enabled, err := registry.IsAutoStartEnabled("EVS Launcher")
if enabled {
    log.Println("已设置开机自启动")
}

Launcher 集成:cmd/launcher/main.go

trayOnReady() 函数中自动调用:

// 设置开机自启动
if err := registry.SetAutoStart("EVS Launcher"); err != nil {
    fmt.Printf("[trayOnReady] 设置开机自启动失败: %v\n", err)
    logger.WithOperation("launcher", "autostart").Warn("设置开机自启动失败", "error", err)
} else {
    fmt.Println("[trayOnReady] 开机自启动已设置")
    logger.WithOperation("launcher", "autostart").Info("开机自启动已设置")
}

权限要求

  • 无需管理员权限
  • 使用 HKEY_CURRENT_USER 而不是 HKEY_LOCAL_MACHINE
  • 每个用户独立设置自启动

日志记录

所有操作都会记录到日志:

  • 成功设置:INFO 级别
  • 设置失败:WARN 级别
  • 操作标记:launcher:autostart

测试方法

  1. 验证注册表项

    regedit
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
    

    查看是否存在 EVS Launcher

  2. 验证自启动

    • 重启系统
    • 检查 launcher 是否自动启动
  3. 检查日志

    • 查看 launcher 日志文件
    • 搜索 autostart 关键字

注意事项

  1. 路径更新

    • 如果 launcher.exe 路径改变,需要重新运行 launcher 来更新注册表
  2. 卸载清理

    • 卸载应用时,应该调用 RemoveAutoStart() 清理注册表
  3. 多用户环境

    • 每个用户需要独立设置自启动
    • 注册表项存储在用户配置文件中

相关文件

  • internal/registry/autostart.go - 自启动功能实现
  • cmd/launcher/main.go - launcher 集成
  • internal/registry/ - 注册表操作模块