gpt4 book ai didi

windows - 在 Go 中请求 UAC 提升

转载 作者:IT王子 更新时间:2023-10-29 01:39:50 25 4
gpt4 key购买 nike

在 Go 中有什么方法可以将新进程或线程提升为管理员?

似乎 ShellExecute() 在 Go 中不可用,并且无法使用 CreateProcess() 提升。我不知道还有什么可能。

最佳答案

你可以试试看项目w32 : 它有一个 shell32.go ShellExecute()这可能会有用。

w32 is a wrapper of windows apis for the Go Programming Language.

It wraps win32 apis to "Go style" to make them easier to use.


2020年更新,自2014年以来,包golang.org/x/sys/windows确实有 ShellExecute()功能。

Cliven提及 Jeremy Black的博文“Relaunch Windows Golang program with UAC elevation when admin rights needed

  • Jeremy 首先通过尝试打开 \\.\PHYSICALDRIVE0(根据 reddit suggestion)检测程序是否已经以管理员身份运行

    _, err := os.Open("\\\\.\\PHYSICALDRIVE0")
  • 然后 Jeremy 使用 ShellExecute() 函数调用 runas (在 Elevating During Runtime 的“Michael Haephrati ”中描述)

    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)
    }
    }

关于windows - 在 Go 中请求 UAC 提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26068139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com