>백엔드 개발 >Golang >Windows에서 Go 애플리케이션에 대한 관리자 권한을 자동으로 요청하려면 어떻게 해야 하나요?

Windows에서 Go 애플리케이션에 대한 관리자 권한을 자동으로 요청하려면 어떻게 해야 하나요?

Linda Hamilton
Linda Hamilton원래의
2024-11-08 05:34:01741검색

How can I automatically request administrator privileges for my Go application in Windows?

Go를 사용하여 Windows에서 관리자 권한 요청

이 문서에서는 애플리케이션을 시작할 때 "관리자 권한으로 실행"을 수동으로 선택하지 않고도 메시지가 표시되도록 하는 방법을 살펴봅니다.

문제 설명:

이 질문은 높은 권한 없이 Windows 시스템 폴더(C:Windows)에 쓸 수 없기 때문에 발생합니다. 제공된 코드를 실행할 때 애플리케이션이 "액세스가 거부되었습니다" 오류와 함께 test.txt 파일에 쓰지 못합니다.

해결책:

이 문제를 해결하려면 자체- 높은 권한으로 애플리케이션을 다시 시작하는 방법이 제시됩니다. 이 기술은 다음 접근 방식을 활용합니다:

1. 관리자 상태 확인:

amAdmin() 함수는 .PHYSICALDRIVE0 장치 열기를 시도하여 애플리케이션이 관리자로 실행되고 있는지 확인합니다. 액세스가 허용되면 함수는 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

2. 고도로 다시 시작:

amAdmin()이 false를 반환하면 runMeElevated() 함수가 실행됩니다. 이 함수는 Windows ShellExecute API를 사용하여 상승된 권한으로 애플리케이션을 다시 시작합니다. 사용자에게 관리자 권한을 요청하는 "runas" 동사를 지정합니다.

3. 주요 기능 실행:

주 기능은 먼저 애플리케이션에 관리자 권한이 있는지 확인합니다. 그렇지 않은 경우 runMeElevated() 함수를 호출하여 관리자로 다시 시작합니다. 애플리케이션이 이미 상승된 권한으로 실행되고 있는 경우 의도한 코드 실행을 진행합니다.

코드 샘플:

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
}

이 방법을 구현하면 애플리케이션은 정상적으로 실행되면 관리자 권한을 묻는 메시지가 자동으로 표시되므로 마우스 오른쪽 버튼 클릭 메뉴를 통해 수동으로 권한을 상승할 필요가 없습니다.

위 내용은 Windows에서 Go 애플리케이션에 대한 관리자 권한을 자동으로 요청하려면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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