From 622f17db9f5a68e7cf3eb5573e36c8de2f53e477 Mon Sep 17 00:00:00 2001 From: Rudi Date: Sun, 20 Jul 2025 12:24:51 +0200 Subject: [PATCH] improved windows support --- services/linuxServices.go | 26 ++++++++++++++++++++++++++ services/services.go | 29 ----------------------------- services/windowsServices.go | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 58 insertions(+), 30 deletions(-) diff --git a/services/linuxServices.go b/services/linuxServices.go index c85455a..48878d4 100644 --- a/services/linuxServices.go +++ b/services/linuxServices.go @@ -8,3 +8,29 @@ import _ "embed" //go:embed exampleService var exampleService []byte + +func runService(name string, file []byte) error { + tempFile, err := os.CreateTemp("", name) + if err != nil { + return err + } + + if _, err = tempFile.Write(file); err != nil { + tempFile.Close() + return err + } + if err = tempFile.Close(); err != nil { + return err + } + if err = os.Chmod(tempFile.Name(), 0777); err != nil { + return err + } + + cmd := exec.Command(tempFile.Name()) + cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true} + if err = cmd.Start(); err != nil { + return err + } + + return nil +} diff --git a/services/services.go b/services/services.go index 233f890..e7cd575 100644 --- a/services/services.go +++ b/services/services.go @@ -2,37 +2,8 @@ package services import ( "github.com/DariusKlein/kleinCommand/common" - "os" - "os/exec" - "syscall" ) func RunExampleService() error { return runService(common.ExampleServiceName, exampleService) } - -func runService(name string, file []byte) error { - tempFile, err := os.CreateTemp("", name) - if err != nil { - return err - } - - if _, err = tempFile.Write(file); err != nil { - tempFile.Close() - return err - } - if err = tempFile.Close(); err != nil { - return err - } - if err = os.Chmod(tempFile.Name(), 0777); err != nil { - return err - } - - cmd := exec.Command(tempFile.Name()) - cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true} - if err = cmd.Start(); err != nil { - return err - } - - return nil -} diff --git a/services/windowsServices.go b/services/windowsServices.go index c4b27c4..5365145 100644 --- a/services/windowsServices.go +++ b/services/windowsServices.go @@ -4,7 +4,38 @@ package services //go:generate go build ./example -import _ "embed" +import ( + _ "embed" + "os" + "os/exec" + "syscall" +) //go:embed exampleService.exe var exampleService []byte + +func runService(name string, file []byte) error { + tempFile, err := os.CreateTemp("", name) + if err != nil { + return err + } + + if _, err = tempFile.Write(file); err != nil { + tempFile.Close() + return err + } + if err = tempFile.Close(); err != nil { + return err + } + if err = os.Chmod(tempFile.Name(), 0777); err != nil { + return err + } + + cmd := exec.Command(tempFile.Name()) + cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} + if err = cmd.Start(); err != nil { + return err + } + + return nil +}