実行ファイルのバージョン情報を取得するクラス


アタッシェケースをはじめとして、作成したアプリケーションのバージョン番号を上げるとき、各所に埋め込まれた番号を編集するのが面倒で、よくミスをしていました。

そのため、途中からWin32 APIを使って実行ファイル自身から取得するようにしています(そうすれば一箇所の編集で済みます)。


LPVOID* pVersionInfo;

String FileVersion = ""; //ファイルバージョン

DWORD dwInfoSize;
DWORD dwHandleTemp = NULL;

LPVOID lpLang = NULL;
UINT dwLength;
WORD* lpTranslate;
String SubBlock;
LPVOID lpInfoItem = NULL;
String Result="";

//バージョン情報のサイズを取得する
dwInfoSize = GetFileVersionInfoSizeW(Application->ExeName.c_str(), &dwHandleTemp);
pVersionInfo = new LPVOID[dwInfoSize];

if(GetFileVersionInfoW(Application->ExeName.c_str(), dwHandleTemp, dwInfoSize, pVersionInfo)){

  //言語IDとキャラクタIDを取得する
  if (VerQueryValue(pVersionInfo, TEXT("\\VarFileInfo\\Translation"), &lpLang, &dwLength)){

    lpTranslate = (WORD*)lpLang;

    //ファイルバージョン
    SubBlock.sprintf(L"\\StringFileInfo\\%04x%04x\\FileVersion", *lpTranslate, *(lpTranslate + 1));
    if ( VerQueryValueW(pVersionInfo, SubBlock.w_str(), &lpInfoItem, &dwLength) ){
      Result.sprintf(L"%s", lpInfoItem);
      // "2.7.4.0" などという文字列が入ります
      FileVersion = Result;
    }
  }

}

さらに最近は、それさえも面倒になってきたので、クラスとしてひとまとめにしました。

ダウンロードはこちら↓

GetAppInfoString.zip

ソースは無保証の代わりに、特に使用条件はありません。改造、転載はご自由にどうぞ。

基本的には、C++Builderでの動作確認のみですが、書き換えれば、Visual Studioでもいけると思います。

コンストラクタですべての情報を取得して、各メンバ変数にぶち込んでます。

ですので、使い方は単純です。↓

#include "GetAppInfoString.h"

TGetAppInfoString *pAppInfoString = new TGetAppInfoString();

Memo1->Lines->Add(pAppInfoString->Comments); //コメント
Memo1->Lines->Add(pAppInfoString->InternalName); //内部名
Memo1->Lines->Add(pAppInfoString->ProductName); //製品名
Memo1->Lines->Add(pAppInfoString->CompanyName); //会社名
Memo1->Lines->Add(pAppInfoString->LegalCopyright); //著作権
Memo1->Lines->Add(pAppInfoString->ProductVersion); //製品バージョン
Memo1->Lines->Add(pAppInfoString->FileDescription); //説明
Memo1->Lines->Add(pAppInfoString->LegalTrademarks); //商標
Memo1->Lines->Add(pAppInfoString->PrivateBuild); //PrivateBuild
Memo1->Lines->Add(pAppInfoString->FileVersion); //ファイルバージョン
Memo1->Lines->Add(pAppInfoString->OriginalFilename); //正式ファイル名
Memo1->Lines->Add(pAppInfoString->SpecialBuild); //SpecialBuild

delete pAppInfoString;

お気軽にコメントをどうぞ〜

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントフィード

s