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

Rust resファイルリンクメモ

RustWindowsのリソースをリンクする方法のメモ。

 

概要

Windowsのリソースファイル(拡張子rc)をコンパイルして拡張子resのファイルを作っておき、Rustのビルド時にリンクすることが出来る。


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

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


まず、元となるバージョン情報を記述した、拡張子rcのリソースファイル(テキストファイル)を作成する。

rcファイルのエンコーディングは、ASCIIの範囲内であればUTF-8やShift_JISでいいが、日本語を使いたい場合はUTF-16LEにする。

versioninfo.rc

#include <windows.h>

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 0,1,1,0
 PRODUCTVERSION 0,1,0,0
 FILEFLAGSMASK 0x3fL
 FILEFLAGS 0x0L
 FILEOS VOS__WINDOWS32
 FILETYPE VFT_APP
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904B0" // 英語 + Unicode
        BEGIN
            VALUE "OriginalFilename", "myapp.exe"
            VALUE "FileDescription",  "My Example Application"
            VALUE "ProductName",      "MyExampleApp"
            VALUE "Comments",         "My Example comment"
            VALUE "CompanyName",      "hishidama"
            VALUE "FileVersion",      "0.1.1"
            VALUE "ProductVersion",   "0.1.0"
            VALUE "LegalCopyright",   "Copyright 2025 hishidama"
            VALUE "LegalTrademarks",  "MyExampleApp(TM)"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x0409, 1200 // 言語ID(0x0409 = 英語), 文字コード(1200 = Unicode)
    END
END

それから、rcファイルをコンパイルしてresファイルを生成する。

Windows SDKのrc.exeを使う場合、Windows SDKのパスが通ったコマンドプロンプトを使う。
このコマンドプロンプトは、Visual Studio Community 2022をインストールすれば入っている。
Windows10のスタートメニューから「Visual Studio 2022」→「x64 Native Tools Command Prompt for VS 2022」で起動できる。

> cd rcファイルのある場所
> rc.exe versioninfo.rc
> dir *.res

最後に、Rustのビルドスクリプトを作成する。

プロジェクト/build.rs:

fn main() {
    println!("cargo:rustc-link-arg-bins=versioninfo.res");
}

resファイルのパスは、プロジェクトディレクトリーからの相対パスで指定する。


これでビルドすると、生成されるexeファイル(やdllファイル)にバージョン情報が埋め込まれる。

cargo build

生成されたexeファイル(やdllファイル)を右クリックしてプロパティーを選択し、「詳細」タブを表示すると、埋め込まれたバージョン情報が確認できる。

あるいは、PowerShellから以下のコマンドで確認することも出来る。

(Get-ItemProperty .\target\debug\example.exe).VersionInfo | Format-List

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