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 { k, err := registry.OpenKey(registry.CURRENT_USER, config.StartupRunKey, registry.SET_VALUE) if err != nil { if errors.Is(err, registry.ErrNotExist) { return nil } return err } defer k.Close() err = k.DeleteValue(config.StartupValueName) if errors.Is(err, registry.ErrNotExist) { _ = disableWatchdog() return nil } if err != nil { return err } return disableWatchdog() } func installedCommandLine() (string, error) { exe, err := config.InstalledExe() if err != nil { return "", err } return `"` + exe + `" -background`, nil }