小能豆

用go写个程序,编译成exe可执行文件,想知道下怎么可以随着windows开机自启动,可以用什么依赖包配合windows实现吗?

go

用go写个程序,编译成exe可执行文件,想知道下怎么可以随着windows开机自启动,可以用什么依赖包配合windows实现吗?


阅读 55

收藏
2024-06-02

共1个答案

小能豆

在Windows上实现一个Go程序开机自启动,有几种方法,其中一种常见且简单的方法是将程序添加到Windows的注册表启动项中。你可以使用Go编写一个程序,通过修改注册表来实现这一目的。

使用 golang.org/x/sys/windows/registry 包修改注册表

golang.org/x/sys/windows/registry 是一个处理Windows注册表的包,可以用它来将你的程序路径添加到注册表的启动项中。

首先,确保你安装了 golang.org/x/sys/windows/registry 包:

go get golang.org/x/sys/windows/registry

示例代码

以下是一个Go程序示例,该程序会将自身添加到Windows启动项中:

package main

import (
    "fmt"
    "os"
    "path/filepath"

    "golang.org/x/sys/windows/registry"
)

func main() {
    err := addToStartup()
    if err != nil {
        fmt.Printf("Failed to add to startup: %v\n", err)
        return
    }
    fmt.Println("Successfully added to startup!")
}

func addToStartup() error {
    // 获取当前可执行文件的路径
    exePath, err := os.Executable()
    if err != nil {
        return fmt.Errorf("could not get executable path: %w", err)
    }
    exePath, err = filepath.Abs(exePath)
    if err != nil {
        return fmt.Errorf("could not get absolute path: %w", err)
    }

    // 打开或创建注册表项
    key, _, err := registry.CreateKey(registry.CURRENT_USER, `Software\Microsoft\Windows\CurrentVersion\Run`, registry.ALL_ACCESS)
    if err != nil {
        return fmt.Errorf("could not create registry key: %w", err)
    }
    defer key.Close()

    // 将可执行文件路径写入注册表项
    err = key.SetStringValue("MyGoApp", exePath)
    if err != nil {
        return fmt.Errorf("could not set registry value: %w", err)
    }

    return nil
}

编译程序

将上面的代码保存为 main.go,然后使用以下命令编译成Windows可执行文件:

GOOS=windows GOARCH=amd64 go build -o MyGoApp.exe main.go

运行程序

双击运行 MyGoApp.exe,它将自身路径添加到注册表中的启动项。下次Windows启动时,这个程序会自动运行。

验证注册表项

你可以通过注册表编辑器(regedit)查看注册表项,路径为:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

在这个路径下应该会看到一个名为 “MyGoApp” 的项,其值为你的可执行文件的路径。

其他注意事项

  1. 权限问题:确保你有足够的权限来修改注册表。如果没有权限,你可能需要以管理员身份运行程序。
  2. 安全问题:修改注册表会引起一些安全问题,确保程序的合法性和安全性,避免恶意软件利用。
  3. 卸载:提供一种方法来从启动项中删除程序路径,防止用户无法轻松卸载你的程序。

通过以上步骤,你可以让你的Go程序在Windows启动时自动运行。

2024-06-02