>백엔드 개발 >Golang >Go를 사용하여 Windows에서 프로그래밍 방식으로 관리자 권한을 요청하는 방법은 무엇입니까?

Go를 사용하여 Windows에서 프로그래밍 방식으로 관리자 권한을 요청하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-08 20:37:021010검색

How to Programmatically Request Administrator Privileges in Windows with Go?

Go를 사용하여 Windows에서 프로그래밍 방식으로 관리자 권한 요청

관리자 권한 없이 애플리케이션을 실행하면 기능이 제한될 수 있습니다. 이 문서에서는 Go를 사용하여 Windows에서 관리자 권한을 요청하고 획득하는 프로세스를 자동화하는 문제에 대한 솔루션을 제공합니다.

문제를 설명하기 위해 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)
    }
}

이 코드를 컴파일하고 실행하면 "액세스가 거부되었습니다."라는 오류와 함께 실패합니다. 이는 프로세스가 높은 권한으로 실행되고 있지 않기 때문입니다.

이 문제를 해결하려면 관리자로 실행 중인지 여부를 감지하고 그렇지 않은 경우 UAC(사용자 계정 제어) 프롬프트. 이렇게 하면 애플리케이션이 대부분의 시간 동안 표준 사용자로 실행되고 필요한 경우에만 권한이 상승됩니다.

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
}

이 솔루션은 필요할 때 별도의 조치 없이 애플리케이션의 권한을 자동으로 상승시키는 편리한 방법을 제공합니다. 매니페스트 또는 마우스 오른쪽 버튼을 클릭하고 "관리자 권한으로 실행"을 선택하는 등의 수동 사용자 작업.

위 내용은 Go를 사용하여 Windows에서 프로그래밍 방식으로 관리자 권한을 요청하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.