S-JIS[2025-08-01] 変更履歴

Rust winresメモ

RustWindowsのリソースを扱うwinresクレートのメモ。


概要

winresは、Windowsのリソースファイル(拡張子rc)をコンパイルしてrustcでリンクするクレート(ビルドツール)。

ただし、複数のリソースを扱うことは出来ない。(出力先のファイル名がresourceで固定なので、どれかひとつしか有効にならない)

ビルド時にWindows SDKのrc.exe(またはMinGW64のwindres.exe)が使われるので、インストールしておく必要がある。


Cargo.toml:

〜

[build-dependencies]
winres = "0.1.12"

なお、winres自体はけっこう古くて(もうメンテされていない?)、フォークがいくつか作られているようだ。


exeファイルにバージョン情報を埋め込む例

cargo buildによって生成されるexeファイル(やdllファイル)にバージョン情報を埋め込む例。


まず、埋め込む情報をCargo.tomlに記述する。

プロジェクト/Cargo.toml:

〜

[package.metadata.winres]
CompanyName = "example company"
FileDescription = "winres example"
ProductName = "example application"
LegalCopyright = "Copyright 2025 hishidama"

製品バージョンやファイルバージョンは、[package]のversionが使われる。


それから、ビルドスクリプトを作成する。

プロジェクト/build.rs:

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

Windowsリソースへ戻る / Rustへ戻る / 技術メモへ戻る
メールの送信先:ひしだま