一尘不染

如何使用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)
    }
}

如果您编译它并双击它,它将打印:

打开:C:\ Windows \ test.txt:拒绝访问。

但是,如果右键单击并以管理员身份运行,它将创建并写入文件。

如何使其仅通过双击即可要求管理员权限?


阅读 367

收藏
2020-07-02

共1个答案

一尘不染

您需要嵌入一个清单文件,该文件将告诉Windows您想要提升的特权。

该页面上的示例是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="9.0.0.0"
    processorArchitecture="x86"
    name="myapp.exe"
    type="win32"
/>
<description>My App</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>
</assembly>

这篇坚果文章表明,使用rsrc应该可以解决问题。

2020-07-02