- Recover panics to disk for diagnostics - Add 5-minute watchdog task with startup - Add -ensure flag to start detached agent - Add script to pull remote folder via API
72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
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
|
|
}
|