Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Meminta Keistimewaan Pentadbir Secara Pemrograman dalam Windows dengan Go?

Bagaimana untuk Meminta Keistimewaan Pentadbir Secara Pemrograman dalam Windows dengan Go?

Linda Hamilton
Lepaskan: 2024-11-08 20:37:02
asal
1000 orang telah melayarinya

How to Programmatically Request Administrator Privileges in Windows with Go?

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)
    }
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan