//go:build windows package startup import ( "errors" "golang.org/x/sys/windows/registry" "tea.chunkbyte.com/kato/go-worm/lib/config" ) func Enabled() bool { k, err := registry.OpenKey(registry.CURRENT_USER, config.StartupRunKey, registry.QUERY_VALUE) if err != nil { return false } defer k.Close() _, _, err = k.GetStringValue(config.StartupValueName) return err == nil } func Enable() error { command, err := installedCommandLine() if err != nil { return err } k, _, err := registry.CreateKey(registry.CURRENT_USER, config.StartupRunKey, registry.SET_VALUE) if err != nil { return err } defer k.Close() if err := k.SetStringValue(config.StartupValueName, command); err != nil { return err } return enableWatchdog() } // SyncInstalledPath rewrites an existing Run entry to the AppData install path. func SyncInstalledPath() error { if !Enabled() { return nil } return Enable() } func Disable() error { var regErr error k, err := registry.OpenKey(registry.CURRENT_USER, config.StartupRunKey, registry.SET_VALUE) if err != nil { if !errors.Is(err, registry.ErrNotExist) { regErr = err } } else { err = k.DeleteValue(config.StartupValueName) _ = k.Close() if err != nil && !errors.Is(err, registry.ErrNotExist) { regErr = err } } taskErr := disableWatchdog() if regErr != nil { return regErr } return taskErr } func installedCommandLine() (string, error) { exe, err := config.InstalledExe() if err != nil { return "", err } // Registry Run requires quotes around a path that may contain spaces. return `"` + exe + `"`, nil }