在 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/