Go编译EXE增加完善应用信息及管理员权限启动
本文是为了解决Go编译EXE文件后,如何将应用程序"完(wei)善(zhuang)"的更好,也是书接上回的一个完善;
注:本文是一篇站在巨人肩膀上的实践记录
成功尝试有效的方法有《GoVersionInfo》和《windres.exe》
一、完善应用详细信息图标及版本信息----GoVersionInfo
1.将git文件下载到任意目录;将下载后的《resource》目录全部复制到本项目根目录;
2.在被编译go文件头部增加
//go:generate goversioninfo -icon=resource/icon.ico -manifest=resource/goversioninfo.exe.manifest
3.根据自己需要完善修改《versioninfo.json》版本信息文件
4.“初始化”生成.syso文件,编译exe
#go generate // 会在项目文件目录生成resource.syso文件 #CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -H=windowsgui" client.go //编译exe会自动把syso文件链接到程序中 注:生成exe时文件夹下面不要用其他.go文件;否则编译失败;
5.查看程序文件信息
二、完善应用详细信息图标及版本信息----windres
核心:通过windres生成一个中间文件 ***.syso,然后通过go编译exe;(我们需要使用MinGW安装windres编译所需的组件)
1.安装windres工具
网上搜索windres.exe进行下载,放入下面mingw安装后的bin目录“C:\MinGW\bin\”
2.下载mingw并安装,然后安装gcc、g++等组件
3.增加环境变量到path
4.检查gcc、g++、windres
5.准备一个demo.dc文件
1 VERSIONINFO FILEVERSION 2,4,1109,2 PRODUCTVERSION 2,4,1109,2 FILEOS 0x40004 FILETYPE 0x1 { BLOCK "StringFileInfo" { BLOCK "040904B0" { VALUE "CompanyName", "Amazon GNU Internal Tools" VALUE "FileDescription", "Amazon GNU Internal Tools" VALUE "FileVersion", "2,4,1109,2" VALUE "InternalName", "Amazon GNU Internal Tools" VALUE "LegalCopyright", "Copyright (C)2019 Amazon. All rights reserved." VALUE "OriginalFilename", "CofoxAmazonBestSellersHold.exe" VALUE "ProductName", "CofoxHoldAmazonTop100" VALUE "ProductVersion", "2,4,1109,2" } } BLOCK "VarFileInfo" { VALUE "Translation", 0X0409, 0X04B0 } } IDI_ICON1 ICON "network.ico" 1 VERSIONINFO FILEVERSION 2,4,1109,2 PRODUCTVERSION 2,4,1109,2 FILEOS 0x40004 FILETYPE 0x1 { BLOCK "StringFileInfo" { BLOCK "040904B0" { VALUE "CompanyName", "Amazon GNU Internal Tools" VALUE "FileDescription", "Amazon GNU Internal Tools" VALUE "FileVersion", "2,4,1109,2" VALUE "InternalName", "Amazon GNU Internal Tools" VALUE "LegalCopyright", "Copyright (C)2019 Amazon. All rights reserved." VALUE "OriginalFilename", "CofoxAmazonBestSellersHold.exe" VALUE "ProductName", "CofoxHoldAmazonTop100" VALUE "ProductVersion", "2,4,1109,2" } } BLOCK "VarFileInfo" { VALUE "Translation", 0X0409, 0X04B0 } } IDI_ICON1 ICON "network.ico"
6.编译生成*.syso
windres -i demo.rc -o demo.syso
7.将syso文件复制到go项目目录,编译exe
#CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -H=windowsgui" -o GNUTools.exe
8.查看程序文件信息
三、请求管理员权限启动应用
如果程序启动时,默认请求管理员权限,是否就方便了很多?
1.思路非常简单,无论是上面那两种方法,只要修改*.manifest文件即可
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="GNUtools.exe" version="1.0.0.0" processorArchitecture="*"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>
如果使用上面第一种方法《GoVersionInfo》,则直接修改*.manifest文件;
如果使用上线第二种方法《windres》,则需要修改一下demo.rc文件,在最下面加一行;并创建demo.manifest(文件内容参考上面*.manifest)
IDI_MANIFEST1 RT_MANIFEST "demo.manifest"
2.编译程序,查看程序;
搞定!
美中不足,文件信息需要解决文件签名问题!这样"完(wei)善(zhuang)"的会更好!
下一篇,尝试程序签名!
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐