启动golang项目编译的exe可执行文件获取windows管理员权限(UAC)

背景:

go代码启动以后里面涉及到修改ip地址等操作,需要管理员权限。打包好的exe文件双击执行默认是没有管理员权限的,那么修改ip就会提示需要管理员权限。

解决方法1:右键以管理员权限运行exe文件
解决方法2:编译exe的时候,就带上自动执行获取管理员权限的弹窗提示

直接讲解决方法2

注意:前提go环境已经ok

1.项目根目录下新建nac.manifest文件,内容为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
        <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
            <security>
                <requestedPrivileges>
                    <requestedExecutionLevel level="requireAdministrator"/>
                </requestedPrivileges>
            </security>
    </trustInfo>
</assembly>

2.安装rsrc工具go get github.com/akavel/rsrc

3.要使rsrc生效,需要在windows下编译。在电脑上找到github.com/akavel/rsrc(例如通过Evenything直接搜索位置),使用Terminal打开,输入go build, 回车运行,将生成rsrc.exe

4.复制rsrc.exe到go安装目录的/bin/ 目录下,例如C:\go\bin

5.针对无需ico图标,仅需要管理员权限的情况: rsrc -manifest nac.manifest -o nac.syso
针对需要ico图标(提前准备图标icon.ico放到项目根目录下)的情况: rsrc -manifest nac.manifest -o nac.syso -ico icon.ico

6.项目根目录下执行下列命令,将go项目编译为exe:

示例:

go build -o <此处自定义可执行文件名称>.exe

:: 无界面编译: go build -ldflags="-w -s -H windowsgui" -o MVPTool.exe
:: 常规编译(-ldflags=“-w -s” 用于去除调试信息) go build -ldflags="-w -s" -o MVPTool.exe

在这里插入图片描述
双击运行就会自动提示需要获取管理员权限
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38923792/article/details/129419131