63 lines
1.2 KiB
Go
63 lines
1.2 KiB
Go
package startup
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"errors"
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
|
||
|
|
"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 := commandLine()
|
||
|
|
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()
|
||
|
|
return k.SetStringValue(config.StartupValueName, command)
|
||
|
|
}
|
||
|
|
|
||
|
|
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) {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
func commandLine() (string, error) {
|
||
|
|
exe, err := os.Executable()
|
||
|
|
if err != nil {
|
||
|
|
return "", err
|
||
|
|
}
|
||
|
|
exe, err = filepath.Abs(exe)
|
||
|
|
if err != nil {
|
||
|
|
return "", err
|
||
|
|
}
|
||
|
|
return `"` + exe + `" -background`, nil
|
||
|
|
}
|