RustでWindowsのリソースをリンクする方法のメモ。
Windowsのリソースファイル(拡張子rc)をコンパイルして拡張子resのファイルを作っておき、Rustのビルド時にリンクすることが出来る。
cargo buildによって生成されるexeファイル(やdllファイル)にバージョン情報を埋め込む例。
まず、元となるバージョン情報を記述した、拡張子rcのリソースファイル(テキストファイル)を作成する。
rcファイルのエンコーディングは、ASCIIの範囲内であればUTF-8やShift_JISでいいが、日本語を使いたい場合はUTF-16LEにする。
#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のビルドスクリプトを作成する。
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