syso - tool for embedding various type of resources in go Windows executable
Table of contents:
| Feature | rsrc | goversioninfo | syso(this project) |
|---|---|---|---|
| Embedding icons | ✔ | ✔ | ✔ |
| Embedding manifest | ✔ | ✔ | ✔ |
| Configuration through a file | ✔ | ✔ | |
| Embedding version info | ✔ | ✔ | |
| Embedding multilingual version info | ✔ | ||
| Fixed resource identifier | ✔ |
Because you can easily load your resource in runtime. Other tools do not guarantee your resource to have same id across builds.
$ go get -u github.com/hallazzang/syso/...
Write a configuration file in JSON, which tells syso what resources you want to embed. Here's an example:
{
"Icons": [
{
"ID": 1,
"Path": "icon.ico"
}
],
"Manifest": {
"ID": 2,
"Path": "App.exe.manifest"
}
}You can specify name instead of id:
...
{
"Name": "MyIcon",
"Path": "icon.ico"
}
...Save it as syso.json in project's directory and run the tool:
$ syso
This will generate out.syso in your current directory.
You can now go build to actually include the resources in your executable.
Configuration file is written in JSON format.
Top-level configuration is an object that has three optional fields:
Icon, Manifest, VersionInfos.
Here are details about configuration object types.
| Field | Type | Description |
|---|---|---|
| ID | Number |
|
| Name | String |
|
| Path | String |
Icon file path |
| Field | Type | Description |
|---|---|---|
| ID | Number |
|
| Name | String |
|
| Path | String |
Manifest file path |
| Field | Type | Description |
|---|---|---|
| ID | Number |
|
| Name | String |
|
| Fixed | VersionInfoFixed |
Language-independent information |
| StringTables | []VersionInfoStringTable |
Language-specific string information |
| Translations | []VersionInfoTranslation |
Language and charset pairs which application supports |
| Field | Type | Description |
|---|---|---|
| FileVersion | String |
Format: "Major.Minor.Patch.Build" |
| ProductVersion | String |
Format: "Major.Minor.Patch.Build" |
| Field | Type | Description |
|---|---|---|
| Language | String |
(Required) String table's language, in hex |
| Charset | String |
(Required) String table's charset, in hex |
| Strings | VersionInfoStrings |
(Required) Actual string table |
| Field | Type | Description |
|---|---|---|
| Comments | String |
|
| CompanyName | String |
|
| FileDescription | String |
|
| FileVersion | String |
|
| InternalName | String |
|
| LegalCopyright | String |
|
| LegalTradeMarks | String |
|
| OriginalFilename | String |
|
| PrivateBuild | String |
|
| ProductName | String |
|
| ProductVersion | String |
|
| SpecialBuild | String |
| Field | Type | Description |
|---|---|---|
| Language | String |
(Required) Supported language, in hex |
| Charset | String |
(Required) Supported charset, in hex |
Here's an example configuration:
{
"Icons": [
{
"ID": 1,
"Path": "icon.ico"
},
{
"Name": "Icon",
"Path": "icon2.ico"
}
],
"Manifest": {
"ID": 1,
"Path": "App.exe.manifest"
},
"VersionInfos": [
{
"ID": 1,
"Fixed": {
"FileVersion": "10.0.14393.0",
"ProductVersion": "10.0.14393.0"
},
"StringTables": [
{
"Language": "0409",
"Charset": "04b0",
"Strings": {
"CompanyName": "Microsoft Corporation",
"FileDescription": "Windows Command Processor",
"FileVersion": "10.0.14393.0 (rs1_release.160715-1616)",
"InternalName": "cmd",
"LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.",
"OriginalFilename": "Cmd.Exe",
"ProductName": "Microsoft\u00ae Windows\u00ae Operating System",
"ProductVersion": "10.0.14393.0"
}
}
],
"Translations": [
{
"Language": "0409",
"Charset": "04b0"
}
]
}
]
}Note that keys are case-insensitive.
You can use both "companyName" and "CompanyName", or even "companyname" for key.
MIT