Heim >Backend-Entwicklung >Golang >Wie kann ich mit Go programmgesteuert Administratorrechte in Windows anfordern?
Programmgesteuert Administratorrechte in Windows mit Go anfordern
Das Ausführen von Anwendungen ohne Administratorrechte kann deren Funktionalität einschränken. Dieser Artikel bietet eine Lösung für die Herausforderung, den Prozess des Anforderns und Erhaltens von Administratorberechtigungen in Windows mithilfe von Go zu automatisieren.
Um das Problem zu veranschaulichen, betrachten Sie den folgenden Code, der versucht, in eine Datei im Windows-Verzeichnis zu schreiben:
package main import ( "fmt" "io/ioutil" "time" ) func main() { err := ioutil.WriteFile("C:/Windows/test.txt", []byte("TESTING!"), 0644) if err != nil { fmt.Println(err.Error()) time.Sleep(time.Second * 3) } }
Wenn Sie diesen Code kompilieren und ausführen, schlägt er mit der Fehlermeldung „Zugriff verweigert“ fehl. Dies liegt daran, dass der Prozess nicht mit erhöhten Rechten ausgeführt wird.
Um dieses Problem zu beheben, können Sie eine Technik implementieren, die erkennt, ob Sie als Administrator ausgeführt werden, und andernfalls die Anwendung mit einem UAC (Benutzer) neu startet Eingabeaufforderung zur Kontosteuerung. Dadurch kann die Anwendung die meiste Zeit als Standardbenutzer ausgeführt werden und nur bei Bedarf erhöht werden.
package main import ( "fmt" "golang.org/x/sys/windows" "os" "syscall" "time" ) func main() { // if not elevated, relaunch by shellexecute with runas verb set if !amAdmin() { runMeElevated() } time.Sleep(10 * time.Second) } func runMeElevated() { verb := "runas" exe, _ := os.Executable() cwd, _ := os.Getwd() args := strings.Join(os.Args[1:], " ") verbPtr, _ := syscall.UTF16PtrFromString(verb) exePtr, _ := syscall.UTF16PtrFromString(exe) cwdPtr, _ := syscall.UTF16PtrFromString(cwd) argPtr, _ := syscall.UTF16PtrFromString(args) var showCmd int32 = 1 //SW_NORMAL err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) if err != nil { fmt.Println(err) } } func amAdmin() bool { _, err := os.Open("\\.\PHYSICALDRIVE0") if err != nil { fmt.Println("admin no") return false } fmt.Println("admin yes") return true }
Diese Lösung bietet eine praktische Möglichkeit, die Berechtigungen Ihrer Anwendung bei Bedarf automatisch zu erhöhen, ohne dass ein Manifest oder eine manuelle Benutzeraktion wie Rechtsklick und Auswahl von „Als Administrator ausführen“
Das obige ist der detaillierte Inhalt vonWie kann ich mit Go programmgesteuert Administratorrechte in Windows anfordern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!