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