golang实现mac、windows开机自启动
- 作者:
- 淡白
- 创建时间:
- 2022-07-25 19:17:05
- Go
摘要:DownTip是一个摸鱼小工具,作者最近在给状态栏小工具添加一些功能模块,其中包括了一个自启动的功能。实现原理是通过在LaunchAgents目录下写入一个启动配置文件,在Mac上实现自启动。在Windows上,作者是在用户启动目录下写入一个bat文件来启动当前二进制。具体实现的代码可以参考上述代码段。
DownTip
DownTip一个摸鱼小工具
我最近在给我的状态栏小工具做一些功能模块,其中我加入了一个自启动的功能在这里分享下。
现状
实现
实现原理是在LaunchAgents目录下写入启动配置文件配置说明。 win则是在用户启动目录下写入一个bat来启动当前二进制。
const (
macListFile = `
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>cn.p00q.tipbar</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/DownTip.app/Contents/MacOS/down_tip</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/Applications/DownTip.app/Contents/MacOS</string>
<key>StandardErrorPath</key>
<string>/tmp/down_tip.err</string>
<key>StandardOutPath</key>
<string>/tmp/down_tip.out</string>
</dict>
</plist>
`
winBat = `start %s`
)
func start(on bool) error {
var err error
var path, content string
current, err := user.Current()
if err != nil {
return err
}
switch runtime.GOOS {
case "darwin":
path = fmt.Sprintf("%s/Library/LaunchAgents/cn.p00q.tipbar.plist", current.HomeDir)
content = macListFile
//case "linux":
case "windows":
path = fmt.Sprintf("%s\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\down_tip.bat", current.HomeDir)
abs, _ := filepath.Abs(os.Args[0])
content = fmt.Sprintf(winBat, abs)
default:
return errors.New("不支持的系统")
}
return writer(on, path, content)
}
func writer(on bool, path, content string) error {
var err error
if on {
stat, _ := os.Stat(path)
if stat == nil {
err = ioutil.WriteFile(path, []byte(content), os.ModePerm)
}
} else {
err = os.Remove(path)
}
return err
}