• 记一次Golang Windows GUI 程序 添加UAC权限+exe图标+程序信息


    一、准备:

    1.1、GOPATH目录下的bin文件夹添加系统path变量中。

    添加后可直接在任意位置控制台中直接调用bin目录下的可执行程序。

    1.2、准备好自己的程序ico图标文件,放在main.go同级目录。

    下文中提到的:控制台运行命令,都是在main.go同级目录运行的。

    二、用到的工具:

    2.1、rsrc
    • 支持生成UAC权限、生成应用程序图标生成应用程序信息
    • 缺点:生成应用程序图标和应用程序信息后,64位系统下对go程序打包时报错,因此不得不再多使用下面一个包。
    2.2、goversioninfo
    • 支持生成应用程序图标、生成应用程序信
    • 缺点:不支持UAC权限文件生成
    2.3、可根据情况按需使用,如果只需要UAC权限则使用rsrc工具即可。

    三、使用rsrc生成UAC权限

    3.1、安装rsrc工具:
    • 控制台运行命令:
    # 安装rsrc包
    
    > go install github.com/akavel/rsrc
    # 测试是否安装成功
    > rsrc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 如图:
      在这里插入图片描述

    注意:如果无法运行 rsrc ,请参考步骤:1.1

    3.2、生成UAC权限文件:
    • 程序main.go目录创建文件:manifest.xml,内容:
    
    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 控制台运行命令:rsrc -manifest manifest.xml -o nac.syso,如图:
      在这里插入图片描述
    • 成功后会在程序根目录生成nac.syso文件,如图:
      在这里插入图片描述
    3.4、打包应用程序:
    • 如果不需要添加程序图标以及程序信息,请直接跳到步骤:5.1,参考应用程序打包流程。

    四、使用goversioninfo生成应用程序图标+应用程序信息

    4.1、安装goversioninfo工具:
    • 控制台运行命令:
    # 安装goversioninfo包
    > go install github.com/josephspurrier/goversioninfo
    # 测试是否安装成功
    > goversioninfo -h
    
    • 1
    • 2
    • 3
    • 4
    • 成功如下图所示:
      在这里插入图片描述

    注意:如果无法运行 goversioninfo -h ,请参考步骤:1.1

    4.2、生成应用图标、应用信息文件:
    • 程序main.go同级目录创建versioninfo.json文件,内容:
    {
        "FixedFileInfo": {
            "FileVersion": {
                "Major": 1,
                "Minor": 0,
                "Patch": 0,
                "Build": 0
            },
            "ProductVersion": {
                "Major": 1,
                "Minor": 0,
                "Patch": 0,
                "Build": 0
            },
            "FileFlagsMask": "3f",
            "FileFlags ": "00",
            "FileOS": "040004",
            "FileType": "01",
            "FileSubType": "00"
        },
        "StringFileInfo": {
            "Comments": "程序描述",
            "CompanyName": "公司名称",
            "FileDescription": "文件说明",
            "FileVersion": "v1.0.0.0",
            "InternalName": "程序内部名称",
            "LegalCopyright": "Copyright (c) 2022 xxxxxx",
            "LegalTrademarks": "",
            "OriginalFilename": "原始文件名",
            "PrivateBuild": "",
            "ProductName": "产品名称",
            "ProductVersion": "v1.0.0.0",
            "SpecialBuild": ""
        },
        "VarFileInfo": {
            "Translation": {
                "LangID": "0409",
                "CharsetID": "04B0"
            }
        },
        "IconPath": "favicon.ico",
        "ManifestPath": ""
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 文件中IconPath字段对应你应用程序的ico图标文件,并将图标文件放在main.go同级目录。
    • 控制台运行命令:go generate -run "goversioninfo -platform-specific=false -64=true",如图:
      在这里插入图片描述

    注意:64位系统需要在命令中添加-64=true

    • 成功后,会生成resource.syso文件,如图:
      在这里插入图片描述

    五、打包应用程序:

    5.1、普通应用程序:
    • 控制台运行命令:go build
    5.2、GUI程序:
    • 控制台运行命令:go build -ldflags "-H=windowsgui"

    六、效果:

    6.1、应用程序图标:

    在这里插入图片描述

    6.2、应用程序信息:

    在这里插入图片描述

  • 相关阅读:
    同花顺_代码解析_交易系统_J09_18
    SWT/ANR问题--ANR/JE引发SWT
    docker部署springboot程序时遇到的network问题
    加密的手机号,如何模糊查询?
    etcd备忘录
    命名实体识别
    工作流JBPM流程图说明
    sklearn基础篇(七)-- 随机森林(Random forest)
    c语言数据结构 二叉树(二)
    U-net详解
  • 原文地址:https://blog.csdn.net/u012978258/article/details/127581356