added autostart for windows and autostart for devices
This commit is contained in:
@@ -2,16 +2,81 @@
|
||||
|
||||
package service
|
||||
|
||||
import "fmt"
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const taskName = "USB-Client"
|
||||
|
||||
// Install creates a Windows Scheduled Task that runs at system startup
|
||||
func Install(mode, configPath string) error {
|
||||
return fmt.Errorf("Windows service installation not yet implemented")
|
||||
exePath, err := os.Executable()
|
||||
if err != nil {
|
||||
return fmt.Errorf("finding executable: %w", err)
|
||||
}
|
||||
exePath, err = filepath.Abs(exePath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("resolving path: %w", err)
|
||||
}
|
||||
|
||||
absConfigPath, err := filepath.Abs(configPath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("resolving config path: %w", err)
|
||||
}
|
||||
|
||||
// Remove previous task if it exists
|
||||
exec.Command("schtasks", "/Delete", "/TN", taskName, "/F").Run()
|
||||
|
||||
// Create task: run at system startup, as SYSTEM, with highest privileges
|
||||
taskCmd := fmt.Sprintf(`"%s" %s --config "%s" --no-gui`, exePath, mode, absConfigPath)
|
||||
cmd := exec.Command("schtasks", "/Create",
|
||||
"/SC", "ONSTART",
|
||||
"/TN", taskName,
|
||||
"/TR", taskCmd,
|
||||
"/RU", "SYSTEM",
|
||||
"/RL", "HIGHEST",
|
||||
"/F",
|
||||
)
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return fmt.Errorf("creating scheduled task: %w (output: %s)", err, strings.TrimSpace(string(output)))
|
||||
}
|
||||
|
||||
// Start the task immediately
|
||||
startCmd := exec.Command("schtasks", "/Run", "/TN", taskName)
|
||||
startOutput, err := startCmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return fmt.Errorf("starting task: %w (output: %s)", err, strings.TrimSpace(string(startOutput)))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Uninstall stops and removes the Scheduled Task
|
||||
func Uninstall() error {
|
||||
return fmt.Errorf("Windows service uninstallation not yet implemented")
|
||||
// Stop the running task
|
||||
exec.Command("schtasks", "/End", "/TN", taskName).Run()
|
||||
|
||||
// Delete the task
|
||||
cmd := exec.Command("schtasks", "/Delete", "/TN", taskName, "/F")
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return fmt.Errorf("deleting scheduled task: %w (output: %s)", err, strings.TrimSpace(string(output)))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Status returns the current status of the Scheduled Task
|
||||
func Status() (string, error) {
|
||||
return "not implemented on Windows", nil
|
||||
cmd := exec.Command("schtasks", "/Query", "/TN", taskName, "/FO", "LIST")
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return "Task nicht gefunden", nil
|
||||
}
|
||||
return strings.TrimSpace(string(output)), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user