2025-07-20 00:47:03 +02:00
|
|
|
//go:build windows
|
|
|
|
|
|
|
|
|
|
package services
|
|
|
|
|
|
2025-07-20 16:22:46 +02:00
|
|
|
//go:generate go build -o binaries/ ./example
|
2025-07-20 18:46:55 +02:00
|
|
|
//go:generate go build -o binaries/ ./parrot
|
2025-07-20 00:47:03 +02:00
|
|
|
|
2025-07-20 12:24:51 +02:00
|
|
|
import (
|
|
|
|
|
_ "embed"
|
2025-07-20 21:14:17 +02:00
|
|
|
"errors"
|
|
|
|
|
"github.com/DariusKlein/kleinCommand/common"
|
2025-07-20 12:24:51 +02:00
|
|
|
"os"
|
|
|
|
|
"os/exec"
|
|
|
|
|
"syscall"
|
|
|
|
|
)
|
2025-07-20 00:47:03 +02:00
|
|
|
|
2025-07-20 16:22:46 +02:00
|
|
|
//go:embed binaries/exampleService.exe
|
2025-07-20 00:47:03 +02:00
|
|
|
var exampleService []byte
|
2025-07-20 12:24:51 +02:00
|
|
|
|
2025-07-20 18:46:55 +02:00
|
|
|
//go:embed binaries/parrotService.exe
|
|
|
|
|
var parrotService []byte
|
|
|
|
|
|
2025-07-20 12:24:51 +02:00
|
|
|
func runService(name string, file []byte) error {
|
2025-07-20 19:31:37 +02:00
|
|
|
// check for existing socket
|
|
|
|
|
if common.FileExists(common.GetSocketPath(name)) {
|
|
|
|
|
return errors.New("File " + common.GetSocketPath(name) + " already exists.")
|
|
|
|
|
}
|
2025-07-20 14:06:12 +02:00
|
|
|
executableName := name + ".exe"
|
|
|
|
|
tempFile, err := os.CreateTemp("", executableName)
|
2025-07-20 12:24:51 +02:00
|
|
|
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
|
|
|
|
|
}
|
2025-07-20 19:31:37 +02:00
|
|
|
if err = cmd.Process.Release(); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
2025-07-20 12:24:51 +02:00
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|