netclientutils_windows.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package ncutils
  2. import (
  3. "embed"
  4. "fmt"
  5. "log"
  6. "os"
  7. "os/exec"
  8. "strings"
  9. "syscall"
  10. )
  11. //go:embed windowsdaemon/winsw.exe
  12. var winswContent embed.FS
  13. // RunCmd - runs a local command
  14. func RunCmd(command string, printerr bool) (string, error) {
  15. args := strings.Fields(command)
  16. cmd := exec.Command(args[0], args[1:]...)
  17. cmd.Wait()
  18. //cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/C \"" + command + "\""}
  19. out, err := cmd.CombinedOutput()
  20. if err != nil && printerr {
  21. logger.Log(0, "error running command:", command)
  22. logger.Log(0, strings.TrimSuffix(string(out), "\n"))
  23. }
  24. return string(out), err
  25. }
  26. // RunCmd - runs a local command
  27. func RunCmdFormatted(command string, printerr bool) (string, error) {
  28. var comSpec = os.Getenv("COMSPEC")
  29. if comSpec == "" {
  30. comSpec = os.Getenv("SystemRoot") + "\\System32\\cmd.exe"
  31. }
  32. cmd := exec.Command(comSpec)
  33. cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/C \"" + command + "\""}
  34. cmd.Wait()
  35. out, err := cmd.CombinedOutput()
  36. if err != nil && printerr {
  37. logger.Log(0, "error running command:", command)
  38. logger.Log(0, strings.TrimSuffix(string(out), "\n"))
  39. }
  40. return string(out), err
  41. }
  42. // GetEmbedded - Gets the Windows daemon creator
  43. func GetEmbedded() error {
  44. data, err := winswContent.ReadFile("windowsdaemon/winsw.exe")
  45. if err != nil {
  46. return err
  47. }
  48. fileName := fmt.Sprintf("%swinsw.exe", GetNetclientPathSpecific())
  49. err = os.WriteFile(fileName, data, 0700)
  50. if err != nil {
  51. logger.Log(0, "could not mount winsw.exe")
  52. return err
  53. }
  54. return nil
  55. }