Files
go-worm/lib/startup/startup.go
T
kato 36cb847f9e feat(agent): add crash logs and watchdog startup
- 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
2026-09-01 20:04:20 +03:00

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
}