RustでWindowsのリソースを扱うwinresクレートのメモ。
winresは、Windowsのリソースファイル(拡張子rc)をコンパイルしてrustcでリンクするクレート(ビルドツール)。
ただし、複数のリソースを扱うことは出来ない。(出力先のファイル名がresourceで固定なので、どれかひとつしか有効にならない)
ビルド時にWindows SDKのrc.exe(またはMinGW64のwindres.exe)が使われるので、インストールしておく必要がある。
〜 [build-dependencies] winres = "0.1.12"
なお、winres自体はけっこう古くて(もうメンテされていない?)、フォークがいくつか作られているようだ。
cargo buildによって生成されるexeファイル(やdllファイル)にバージョン情報を埋め込む例。
まず、埋め込む情報をCargo.tomlに記述する。
〜 [package.metadata.winres] CompanyName = "example company" FileDescription = "winres example" ProductName = "example application" LegalCopyright = "Copyright 2025 hishidama"
製品バージョンやファイルバージョンは、[package]のversionが使われる。
それから、ビルドスクリプトを作成する。
fn main() { if cfg!(target_os = "windows") { let res = winres::WindowsResource::new(); res.compile().unwrap(); } }
winresは、Windows以外で動かしたときの動作は不定らしいので、Windowsのときだけ動くようにする。(Windowsでしかビルドしないなら気にする必要は無いが)
これでビルドすると、生成されるexeファイル(やdllファイル)にバージョン情報が埋め込まれる。
cargo build
生成されたexeファイル(やdllファイル)を右クリックしてプロパティーを選択し、「詳細」タブを表示すると、埋め込まれたバージョン情報が確認できる。
あるいは、PowerShellから以下のコマンドで確認することも出来る。
(Get-ItemProperty .\target\debug\example.exe).VersionInfo | Format-List