1. 前置き
対象はVisual Studio Express 2012 for Windows Desktopで、Visual C++でWin32コンソールアプリケーションを選んだ場合。C#やVisual Basicの場合は標準でバージョン情報が付くので関係ない。
バージョン情報とは実行ファイルのプロパティを開いたとき「詳細」タブに表示されるもので、この有無はプログラムの実行には関係ないが、何のプログラムか分からなくなったときにその素性を知る手掛かりになる。というより、素性が不明の実行ファイルをいきなり実行するのは普通に考えて危険なので、そういう危険かもしれないファイル扱いされないためには、バージョン情報を付けておくのがベターという話。
2. 作成方法
テキストファイルをプロジェクトに追加するだけなので、そんなに難しくない。
2.1. リソーススクリプトの追加
リソーススクリプトとはバージョン情報などの情報を記述したテキストファイル。Win32コンソールアプリケーションの場合は自動的には作成されないので、追加する必要がある。この例ではプロジェクト名を「Nameless」、リソーススクリプト名を「Nameless.rc」とする。
ソリューションエクスプローラー -> リソースファイル -> 追加 -> 新しい項目 -> ユーティリティ -> テキストファイル(.txt) と進み、ファイル名を「Nameless.rc」と編集して追加。
2.2. リソーススクリプトの編集
作成されたNameless.rcのコードを表示して、以下のように編集する。
#include <windows.h> VS_VERSION_INFO VERSIONINFO FILEVERSION 0,1,0,0 PRODUCTVERSION 0,1,0,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0x0L FILEOS VOS_NT_WINDOWS32 FILETYPE VFT_APP FILESUBTYPE VFT2_UNKNOWN BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "000004b0" // Neutral language, Unicode BEGIN VALUE "CompanyName", "" VALUE "FileDescription", "Win32 console application" VALUE "FileVersion", "0.1.0.0" VALUE "InternalName", "Nameless.exe" VALUE "LegalCopyright", "Copyright (c) 2013 Nameless man" VALUE "OriginalFilename", "Nameless.exe" VALUE "ProductName", "Nameless application" VALUE "ProductVersion", "0.1.0.0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0, 1200 // Neutral language, Unicode END ENDそれぞれの意味はMSDNのページ(VERSIONINFO resource)に網羅されている。
とくに説明が必要な点としては、
- VS_FFI_FILEFLAGSMASK、VOS_NT_WINDOWS32、VFT_APP、VFT2_UNKNOWNの部分は直接数字(Long)で指定することも可能で、その場合は冒頭のwindows.hのincludeは不要。
- 7行目のFILEFLAGSの0x0Lはリリース版の意味。
- 14行目の「BLOCK "000004b0"」と28行目の「VALUE "Translation", 0x0, 1200」は対の関係にあって、前者の上4桁「0000」と後者の「0x0」はlangID、前者の下4桁「04b0」と後者の「1200」はcharsetIDを示す。この例ではlangIDは指定なし、すなわちニュートラル言語で、charsetIDはUnicodeの意味。
2.3. ビルド
後はプロジェクトのビルド時にリソーススクリプトのコンパイルとリンクもVisual Studioが自動的にやってくれるので、何もなし。
この例では実行ファイルの「詳細」タブは以下のようになる。
0 コメント :
コメントを投稿