chore: init bj_power monorepo (dashboard/mes/wms/wms_client/workstation), clear subproject git metadata and align naming to folder names
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
//go:build windows
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/sys/windows"
|
||||
"golang.org/x/sys/windows/registry"
|
||||
)
|
||||
|
||||
var keyPath = `Software\Microsoft\Windows\CurrentVersion\Run`
|
||||
|
||||
func setAutoStart(appName string, exePath string) error {
|
||||
// 当前用户注册表 CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
|
||||
key, _, err := registry.CreateKey(registry.CURRENT_USER, keyPath, registry.ALL_ACCESS)
|
||||
if err != nil {
|
||||
if errors.Is(err, windows.ERROR_ACCESS_DENIED) {
|
||||
return err
|
||||
}
|
||||
return fmt.Errorf("无法打开注册表键: %v", err)
|
||||
}
|
||||
defer key.Close()
|
||||
|
||||
absPath, err := filepath.Abs(exePath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("获取绝对路径失败: %v", err)
|
||||
}
|
||||
|
||||
args := getArgs()
|
||||
|
||||
err = key.SetStringValue(appName, fmt.Sprintf(`"%s" %s`, absPath, args))
|
||||
if err != nil {
|
||||
return fmt.Errorf("写入注册表失败: %v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func removeAutoStart(appName string) error {
|
||||
key, err := registry.OpenKey(registry.CURRENT_USER, keyPath, registry.ALL_ACCESS)
|
||||
if err != nil {
|
||||
if errors.Is(err, windows.ERROR_ACCESS_DENIED) {
|
||||
return err
|
||||
}
|
||||
return fmt.Errorf("无法打开注册表键: %v", err)
|
||||
}
|
||||
defer key.Close()
|
||||
|
||||
err = key.DeleteValue(appName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("删除注册表项失败: %v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func isInRegistry(appName string) (bool, error) {
|
||||
userKey, err := registry.OpenKey(registry.CURRENT_USER, keyPath, registry.QUERY_VALUE)
|
||||
if err == nil {
|
||||
defer userKey.Close()
|
||||
_, _, err := userKey.GetStringValue(appName)
|
||||
if err == nil {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func isAutoStartEnabled(appName string) bool {
|
||||
reg, _ := isInRegistry(appName)
|
||||
return reg
|
||||
}
|
||||
|
||||
func getArgs() string {
|
||||
var argsBuilder strings.Builder
|
||||
for _, arg := range os.Args[1:] {
|
||||
if strings.ContainsAny(arg, " \t") {
|
||||
argsBuilder.WriteString(fmt.Sprintf(`"%s" `, arg))
|
||||
} else {
|
||||
argsBuilder.WriteString(arg + " ")
|
||||
}
|
||||
}
|
||||
return strings.TrimSpace(argsBuilder.String())
|
||||
}
|
||||
Reference in New Issue
Block a user