//go:build windows // +build windows package wutil import ( "bufio" "os/exec" "strings" "syscall" "golang.org/x/text/encoding/unicode" "golang.org/x/text/transform" ) func SilentExec(command string, args ...string) error { cmd := exec.Command(command, args...) cmd.SysProcAttr = &syscall.SysProcAttr{CreationFlags: 0x08000000} cmd.Stdout = nil cmd.Stderr = nil return cmd.Run() } func SilentExecCmd(command string, args ...string) *exec.Cmd { cmd := exec.Command(command, args...) cmd.SysProcAttr = &syscall.SysProcAttr{CreationFlags: 0x08000000} return cmd } func IsWSLInstalled() bool { cmd := SilentExecCmd("wsl", "--status") out, err := cmd.StdoutPipe() cmd.Stderr = nil if err != nil { return false } if err = cmd.Start(); err != nil { return false } scanner := bufio.NewScanner(transform.NewReader(out, unicode.UTF16(unicode.LittleEndian, unicode.UseBOM).NewDecoder())) result := true for scanner.Scan() { line := scanner.Text() // Windows 11 does not set an error exit code when a kernel is not avail if strings.Contains(line, "kernel file is not found") { result = false break } } if err := cmd.Wait(); !result || err != nil { return false } return true }