您可以尝试检查项目w32:它有一个shell32.go ShellExecute()
可能有用的项目。
w32
是 Go 编程语言的 windows api 的包装器。它将 win32 api 包装为“Go 风格”,使它们更易于使用。
2020年更新,从2014年开始,该包golang.org/x/sys/windows
确实有ShellExecute()
功能了。
Cliven提到Jeremy Black的博文“在需要管理员权限时通过 UAC 提升重新启动 Windows Golang 程序”
Jeremy 首先通过尝试打开来检测程序是否已经以管理员身份运行\\.\PHYSICALDRIVE0
(根据此reddit 建议)
_, err := os.Open("\\\\.\\PHYSICALDRIVE0")
Run Code Online (Sandbox Code Playgroud)
然后 Jeremy 使用该ShellExecute()
函数来调用runas
(在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)
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3193 次 |
最近记录: |