syso
syso copied to clipboard
:wrench: tool for embedding various type of resources in go Windows executable
syso
syso - tool for embedding various type of resources in go Windows executable
Table of contents:
- Features
- Installation
- Usage
- License
Features
Feature | rsrc | goversioninfo | syso(this project) |
---|---|---|---|
Embedding icons | ✔ | ✔ | ✔ |
Embedding manifest | ✔ | ✔ | ✔ |
Configuration through a file | ✔ | ✔ | |
Embedding version info | ✔ | ✔ | |
Embedding multilingual version info | ✔ | ||
Fixed resource identifier | ✔ |
Why fixed resource identifier matters?
Because you can easily load your resource in runtime. Other tools do not guarantee your resource to have same id across builds.
Installation
$ go get -u github.com/hallazzang/syso/...
Usage
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
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.
Icon
Field | Type | Description |
---|---|---|
ID | Number |
|
Name | String |
|
Path | String |
Icon file path |
Manifest
Field | Type | Description |
---|---|---|
ID | Number |
|
Name | String |
|
Path | String |
Manifest file path |
VersionInfo
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 |
VersionInfoFixed
Field | Type | Description |
---|---|---|
FileVersion | String |
Format: "Major.Minor.Patch.Build" |
ProductVersion | String |
Format: "Major.Minor.Patch.Build" |
VersionInfoStringTable
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 |
VersionInfoStrings
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 |
VersionInfoTranslation
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.
License
MIT