欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言編譯時為exe添加圖標(biāo)和屬性信息的方法

 更新時間:2023年09月22日 08:51:42   作者:守望時空33  
在使用Go語言開發(fā)應(yīng)用程序時,有個非常方便的地方就是編譯得到的可執(zhí)行文件可以不依賴任何動態(tài)鏈接庫、并且不需要任何運行環(huán)境即可運行,本文給大家介紹Go編譯時為exe添加圖標(biāo)和屬性信息的方法,需要的朋友可以參考下

在使用Go語言開發(fā)應(yīng)用程序時,有個非常方便的地方就是編譯得到的可執(zhí)行文件可以不依賴任何動態(tài)鏈接庫、并且不需要任何運行環(huán)境即可運行,這一點Java就沒那么方便了。

不過在Windows上編譯得到的exe文件,默認是不帶圖標(biāo)和任何屬性信息的,那么怎么才能讓我們編譯得到的可執(zhí)行文件帶上圖標(biāo)和屬性信息呢?

事實上,借助go-winres這款命令行工具即可很方便地實現(xiàn)。

1,安裝go-winres命令

執(zhí)行下列命令即可安裝go-winres命令到電腦中:

go install github.com/tc-hib/go-winres@latest

2,創(chuàng)建配置模板

我們首先需要一個配置文件來指定我們的圖標(biāo)文件和屬性信息,然后將它們編譯得到資源文件,最后將資源文件和Go源代碼一起編譯即可得到帶有圖標(biāo)的可執(zhí)行文件了!

我們可以先生成一個配置模板,然后進行修改即可,執(zhí)行下列命令:

go-winres init

然后在當(dāng)前目錄下,你會發(fā)現(xiàn)多了個winres目錄,其中winres.json就是配置文件,而兩個png文件則是它自帶的圖標(biāo)文件:

3,修改配置

使用文本編輯器打開winres.json文件,其中有一些初始內(nèi)容:

其中的大致結(jié)構(gòu)我們不需要修改,基本上就是修改指定其中部分字段值即可。

下面,我們來單獨看一下每個部分。

(1) 圖標(biāo)指定

我們來看看圖標(biāo)部分,聲明在json文件中的RT_GROUP_ICON屬性中:

"RT_GROUP_ICON": {
	"APP": {
		"0000": [
			"icon.png",
			"icon16.png"
		]
	}
}

上述APP表示一組圖標(biāo),其中還有一個0000,表示語言,不過這兩個屬性名稱都不需要怎么動,重點是看0000這個屬性,它是一個數(shù)組,而很顯然數(shù)組中記錄著一組圖標(biāo),在其中可以指定不同分辨率的圖標(biāo)。在這里指定的圖標(biāo)就會被應(yīng)用到最終編譯的可執(zhí)行文件上去。

圖標(biāo)文件可以就是png文件,將它和winres.json放在同一目錄下,然后在這個0000數(shù)組中指定圖標(biāo)文件名即可。

假設(shè)我現(xiàn)在需要自定義圖標(biāo),并且只需要一個文件,那么我可以先刪除里面自帶的兩個png文件,然后把我的圖標(biāo)放在和winres.json同級目錄下:

然后修改圖標(biāo)部分配置如下:

"RT_GROUP_ICON": {
	"APP": {
		"0000": [
			"my-icon.png"
		]
	}
}

這樣,圖標(biāo)就指定完成了!

需要注意的是,圖片文件尺寸不能大于256 x 256!

(2) 軟件清單

軟件清單部分聲明在RT_MANIFEST屬性中:

"RT_MANIFEST": {
	"#1": {
		"0409": {
			"identity": {
				"name": "",
				"version": ""
			},
			"description": "",
			"minimum-os": "win7",
			"execution-level": "as invoker",
			"ui-access": false,
			"auto-elevate": false,
			"dpi-awareness": "system",
			"disable-theming": false,
			"disable-window-filtering": false,
			"high-resolution-scrolling-aware": false,
			"ultra-high-resolution-scrolling-aware": false,
			"long-path-aware": false,
			"printer-driver-isolation": false,
			"gdi-scaling": false,
			"segment-heap": false,
			"use-common-controls-v6": false
		}
	}
}

上述并非所有屬性都需要填寫和修改,這里將重要的部分講解一下:

  • description 文件的描述信息
  • minimum-os 最低要求操作系統(tǒng),可以是以下值:
    • "vista"
    • "win7"
    • "win8"
    • "win8.1"
    • "win10"
  • execution-level 應(yīng)用程序所需的權(quán)限,可以是:
    • "as invoker" 不需要任何權(quán)限
    • "highest" 使用當(dāng)前用戶的可用最高權(quán)限
    • "administrator" 強制要求管理員權(quán)限才能運行

對于identify屬性,普通應(yīng)用程序建議留空即可,也可以將其刪除。

(3) 元數(shù)據(jù)信息

這部分定義在RT_VERSION屬性中:

"RT_VERSION": {
	"#1": {
		"0000": {
			"fixed": {
				"file_version": "0.0.0.0",
				"product_version": "0.0.0.0"
			},
			"info": {
				"0409": {
					"Comments": "",
					"CompanyName": "",
					"FileDescription": "",
					"FileVersion": "",
					"InternalName": "",
					"LegalCopyright": "",
					"LegalTrademarks": "",
					"OriginalFilename": "",
					"PrivateBuild": "",
					"ProductName": "",
					"ProductVersion": "",
					"SpecialBuild": ""
				}
			}
		}
	}
}

這里也并非所有屬性都需要填寫和修改,這里將重要的部分講解一下:

  • fixed 屬性中的兩個屬性,主要是聲明文件版本和程序版本,按照x.y.z.w的格式自己填寫即可
  • info 主要是屬性信息,其中0409是英語的語言代碼,表示在英文環(huán)境下顯示其中的屬性,在info中可以定義多個語言環(huán)境下的屬性信息,具體大家可以查看官方項目示例,在其中:
    • CompanyName 公司名稱
    • FileDescription 文件描述
    • FileVersion 文件版本
    • ProductVersion 程序版本
    • LegalCopyright 版權(quán)信息
    • OriginalFilename 原始文件名
    • ProductName 程序名稱

(4) 簡易winres.json模板

可見上述有許多屬性是我們大多數(shù)時候不需要進行設(shè)定的,可以刪除,因此這里我提供一個模板,大家可以復(fù)制作為自己的winres.json文件使用:

{
	"RT_GROUP_ICON": {
		"APP": {
			"0000": [
				"my-icon.png"
			]
		}
	},
	"RT_MANIFEST": {
		"#1": {
			"2052": {
				"description": "我的Go示例程序",
				"minimum-os": "win7",
				"execution-level": "highest",
				"ui-access": false,
				"auto-elevate": false,
				"dpi-awareness": "system",
				"disable-theming": false,
				"disable-window-filtering": false,
				"high-resolution-scrolling-aware": false,
				"ultra-high-resolution-scrolling-aware": false,
				"long-path-aware": false,
				"printer-driver-isolation": false,
				"gdi-scaling": false,
				"segment-heap": false,
				"use-common-controls-v6": false
			}
		}
	},
	"RT_VERSION": {
		"#1": {
			"0000": {
				"fixed": {
					"file_version": "1.0.0.0"
				},
				"info": {
					"2052": {
						"CompanyName": "公司名稱",
						"FileDescription": "我的Golang示例程序",
						"LegalCopyright": "? 版權(quán)",
						"OriginalFilename": "demo.exe",
						"ProductName": "Go示例",
						"ProductVersion": "1.0.0.0"
					}
				}
			}
		}
	}
}

大家修改其中信息為自己的即可。

4,編譯資源

winres文件夾所在目錄下執(zhí)行命令

go-winres make

此時你會發(fā)現(xiàn)多了這幾個syso文件,這就是編譯得到的資源:

需要注意的是,上述命令的運行路徑是winres文件夾所在目錄下,而不是winres文件夾里面

當(dāng)然,你也可以使用--in參數(shù)指定json文件位置,如果你的運行路徑不在winres文件夾的所在目錄下的話:

# 指定json配置文件在上一級目錄的res目錄中
go-winres make --in "../res/winres.json"

還可以使用--out參數(shù)指定輸出的資源文件位置,具體大家可以通過命令go-winres make --help查看幫助。

5,編譯Go程序

首先確保上述編譯得到的兩個syso資源文件和Go語言模塊配置go.mod在同級目錄下:

然后像平時一樣,在go.mod所在目錄下執(zhí)行構(gòu)建命令即可:

go build -ldflags "-w -s"

這樣,我們得到的可執(zhí)行文件就有圖標(biāo)和屬性信息了!

上述命令中,ldflags參數(shù)指定的是去除調(diào)試和符號信息以減小構(gòu)建產(chǎn)物文件大小,這個參數(shù)可以省略。

可見我們編譯得到的資源文件都有著類似_windows_amd64這樣的后綴,這個后綴是用于go build命令鏈接資源時,根據(jù)架構(gòu)判斷鏈接哪個資源用的,例如當(dāng)我們編譯64位程序時,go build就會自動尋找名為xxx_windows_amd64.syso的資源文件進行鏈接,同樣地如果是編譯為32位程序,則是尋找名為xxx_windows_386.syso的資源文件,因此syso資源文件的文件名必須是xxx_windows_amd64.syso這樣的形式,不可以修改其后綴。

與此同時,在進行go build時,go.mod文件必須要和syso文件在同一目錄下,如果沒有go.mod文件,那主程序文件(被編譯的)就需要和syso文件在同一目錄下。

以上就是Go語言編譯時為exe添加圖標(biāo)和屬性信息的方法的詳細內(nèi)容,更多關(guān)于Go exe添加圖標(biāo)和屬性信息的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論