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