UPDATE: Enhance macOS build and proxy management functionality
This commit is contained in:
+29
-5
@@ -5,16 +5,40 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func runWithAdmin(exePath string, env []string) error {
|
||||
escaped := strings.ReplaceAll(exePath, `"`, `\"`)
|
||||
script := fmt.Sprintf(`do shell script "%s" with administrator privileges`, escaped)
|
||||
command := shellQuote(exePath)
|
||||
if len(env) > 0 {
|
||||
command = strings.Join(shellEnvAssignments(env), " ") + " " + command
|
||||
}
|
||||
command += " >/dev/null 2>&1 &"
|
||||
|
||||
script := fmt.Sprintf("do shell script %s with administrator privileges", appleScriptString(command))
|
||||
cmd := exec.Command("osascript", "-e", script)
|
||||
cmd.Env = append(os.Environ(), env...)
|
||||
return cmd.Start()
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func shellEnvAssignments(env []string) []string {
|
||||
assignments := make([]string, 0, len(env))
|
||||
for _, value := range env {
|
||||
key, val, ok := strings.Cut(value, "=")
|
||||
if !ok || key == "" {
|
||||
continue
|
||||
}
|
||||
assignments = append(assignments, key+"="+shellQuote(val))
|
||||
}
|
||||
return assignments
|
||||
}
|
||||
|
||||
func shellQuote(value string) string {
|
||||
return "'" + strings.ReplaceAll(value, "'", "'\\''") + "'"
|
||||
}
|
||||
|
||||
func appleScriptString(value string) string {
|
||||
value = strings.ReplaceAll(value, `\`, `\\`)
|
||||
value = strings.ReplaceAll(value, `"`, `\"`)
|
||||
return `"` + value + `"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user