From 66e8beac53efce8ca73180bc0e23e0a81bd5045c Mon Sep 17 00:00:00 2001 From: Hiddify-com Date: Fri, 9 Feb 2024 16:20:40 +0100 Subject: [PATCH] fix: appimage admin service bug --- admin_service/cmd/main.go | 2 -- config/admin_service_cmd_runner.go | 36 ++++++++++++++++++++++++------ config/admin_service_commander.go | 11 ++++----- 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/admin_service/cmd/main.go b/admin_service/cmd/main.go index 3a086df..94f7feb 100644 --- a/admin_service/cmd/main.go +++ b/admin_service/cmd/main.go @@ -24,8 +24,6 @@ func main() { args = append(args, "") } - os.Chdir(os.Args[0]) - arg := C.CString(args[1]) defer C.free(unsafe.Pointer(arg)) diff --git a/config/admin_service_cmd_runner.go b/config/admin_service_cmd_runner.go index c8b18a5..94ee4b9 100644 --- a/config/admin_service_cmd_runner.go +++ b/config/admin_service_cmd_runner.go @@ -6,30 +6,52 @@ import ( "fmt" "os" "os/exec" + "path/filepath" ) func ExecuteCmd(executablePath, args string) (string, error) { - if err := execCmdImp([]string{"gksu", executablePath, args}); err == nil { + cwd:=filepath.Dir(executablePath) + background=false + if appimage:=os.Getenv("APPIMAGE"); appimage!=""{ + executablePath= appimage+" HiddifyService" + args="" + background=true + } + if err := execCmdImp([]string{"gksu", executablePath, args}, cwd, background); err == nil { return "Ok", nil } - if err := execCmdImp([]string{"pkexec", executablePath, args}); err == nil { + if err := execCmdImp([]string{"pkexec", executablePath, args}, cwd, background); err == nil { return "Ok", nil } - if err := execCmdImp([]string{"/bin/sh", "-c", "sudo " + executablePath + " " + args}); err == nil { + if err := execCmdImp([]string{"xterm", "-e", "sudo " + executablePath + " " + args }, cwd, background); err == nil { return "Ok", nil } + + if err := execCmdImp([]string{"sudo", executablePath, args }, cwd, background); err == nil { + return "Ok", nil + } + + return "", fmt.Errorf("Error executing run as root shell command") } -func execCmdImp(commands []string) error { +func execCmdImp(commands []string,cwd string, background bool) error { cmd := exec.Command(commands[0], commands[1:]...) + cmd.Dir = cwd cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr fmt.Printf("Running command: %v", commands) - if err := cmd.Run(); err != nil { - fmt.Printf("Error: %v\n", err) - return err + if background{ + if err := cmd.Start(); err != nil { + fmt.Printf("Error: %v\n", err) + return err + } + }else{ + if err := cmd.Run(); err != nil { + fmt.Printf("Error: %v\n", err) + return err + } } return nil } diff --git a/config/admin_service_commander.go b/config/admin_service_commander.go index f45a3a6..11deb4d 100644 --- a/config/admin_service_commander.go +++ b/config/admin_service_commander.go @@ -28,7 +28,7 @@ func ActivateTunnelService(opt ConfigOptions) (bool, error) { if !isSupportedOS() { return false, E.New("Unsupported OS: " + runtime.GOOS) } - + go startTunnelRequest(opt, true) return true, nil } @@ -93,7 +93,7 @@ func stopTunnelRequest() (bool, error) { func runTunnelService(opt ConfigOptions) (bool, error) { executablePath := getTunnelServicePath() - + fmt.Printf("Executable path is %s",executablePath) out, err := ExecuteCmd(executablePath, "install") fmt.Println("Shell command executed:", out, err) return startTunnelRequest(opt, false) @@ -101,8 +101,8 @@ func runTunnelService(opt ConfigOptions) (bool, error) { func getTunnelServicePath() string { var fullPath string - binFolder := filepath.Dir(os.Args[0]) - + exePath, _ := os.Executable() + binFolder := filepath.Dir(exePath) switch runtime.GOOS { case "windows": fullPath = "HiddifyService.exe" @@ -112,5 +112,6 @@ func getTunnelServicePath() string { fullPath = "HiddifyService" } - return filepath.Join(binFolder, fullPath) + abspath,_:=filepath.Abs(filepath.Join(binFolder, fullPath)) + return abspath }