Meminta Keistimewaan Pentadbir Secara Program dalam Windows dengan Go
Menjalankan aplikasi tanpa keistimewaan pentadbiran boleh mengehadkan kefungsiannya. Artikel ini menyediakan penyelesaian kepada cabaran mengautomasikan proses meminta dan mendapatkan kebenaran pentadbir dalam Windows menggunakan Go.
Untuk menggambarkan isu ini, pertimbangkan kod berikut yang cuba menulis ke fail dalam direktori Windows:
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) } }
Jika anda menyusun dan menjalankan kod ini, ia akan gagal dengan ralat "Akses ditolak." Ini kerana proses itu tidak berjalan dengan keistimewaan yang tinggi.
Untuk menyelesaikan isu ini, anda boleh melaksanakan teknik yang mengesan sama ada anda menjalankan sebagai pentadbir dan, jika tidak, melancarkan semula aplikasi dengan UAC (Pengguna Kawalan Akaun) segera. Ini akan membolehkan aplikasi berjalan sebagai pengguna standard pada kebanyakan masa, hanya dinaikkan apabila perlu.
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 }
Penyelesaian ini menyediakan cara yang mudah untuk meningkatkan keistimewaan aplikasi anda secara automatik apabila perlu, tanpa memerlukan manifes atau sebarang tindakan pengguna manual seperti mengklik kanan dan memilih "Jalankan sebagai pentadbir."
Atas ialah kandungan terperinci Bagaimana untuk Meminta Keistimewaan Pentadbir Secara Pemrograman dalam Windows dengan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!