ビルドプロセスの一環として、コンパイルされたすべてのバイナリのバージョン情報を設定する必要があります。いくつかのバイナリにはすでにバージョン情報があり(コンパイル時に追加されます)、いくつかはありません。
次の情報を適用できるようにしたい:
これらの属性はすべて、ビルドスクリプトによって指定され、コンパイル後に適用する必要があります。これらは、C++ Builder 2007でコンパイルされた標準のバイナリ(アセンブリではありません)です。
これどうやってするの?
Visual Studioはバッチプロセスではありませんが、ファイルリソースを追加/編集することもできます。
.EXEまたは.DLLでFile-> Open-> Fileを使用するだけです。これは、ビルド後のバージョン情報を修正したり、最初からこれらのリソースを持たないファイルに追加したりするのに便利です。
他の多くの回答とは異なり、このソリューションでは完全に無料のソフトウェアを使用しています。
まず、次のようなResources.rc
というファイルを作成します。
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
{
BLOCK "StringFileInfo"
{
BLOCK "040904b0"
{
VALUE "CompanyName", "ACME Inc.\0"
VALUE "FileDescription", "MyProg\0"
VALUE "FileVersion", "1.0.0.0\0"
VALUE "LegalCopyright", "© 2013 ACME Inc. All Rights Reserved\0"
VALUE "OriginalFilename", "MyProg.exe\0"
VALUE "ProductName", "My Program\0"
VALUE "ProductVersion", "1.0.0.0\0"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x409, 1200
}
}
次に、 GoRC を使用して、次を使用して.res
ファイルにコンパイルします。
GoRC /fo Resources.res Resources.rc
(GoRC.exe
のミラーについては、以下の私のコメントを参照してください)
次に、CLIモードで Resource Hacker を使用して、既存の.exe
に追加します。
ResHacker -add MyProg.exe, MyProg.exe, Resources.res,,,
それでおしまい!
または、Win32 exe/dllファイル用のフリーウェア StampVer を確認できます。
バージョンリソースが既にある場合でも、ファイルと製品のバージョンのみを変更します。バージョンリソースが存在しない場合は追加できません。
rceditは比較的新しく、コマンドラインからうまく機能します: https://github.com/atom/rcedit
$ rcedit "path-to-exe-or-dll" --set-version-string "Comments" "This is an exe"
$ rcedit "path-to-exe-or-dll" --set-file-version "10.7"
$ rcedit "path-to-exe-or-dll" --set-product-version "10.7"
JavaScriptからラップする NPMモジュール と、Gruntを使用している場合のために Gruntタスク もあります。
このようなものはどうですか?
verpatch /va foodll.dll %VERSION% %FILEDESCR% %COMPINFO% %PRODINFO% %BUILDINFO%
使用可能 ここでは完全なソースを使用 。
このツールがあります ChangeVersion [1]
機能のリスト(ウェブサイトから):
- コマンドラインインターフェース
- .EXE、.DLL、および.RESファイルのサポート
- バージョンマスクに基づいてFileVersionとProductVersionを更新する
- バージョンキー文字列の追加/変更/削除
- ファイルフラグの調整(デバッグ、特別、プライベートなど)
- プロジェクトファイルの更新(.bdsproj | .bpr | .bpk | .dproj)
- メインアプリケーションアイコンの追加/変更
- 設定でiniファイルを使用する
- Windows Vistaのサポート(昇格が必要)
- 継続的なビルド環境への統合が簡単
完全な開示:私はこのツールを書いた人を知っています、私は彼と一緒に働いていました。しかしこれは、彼が高品質のソフトウェアを作っていることを知っていることも意味します;)
[1] リンクは無効です。 download.cnet.com にミラー化されたバージョンがあるようです。
verpatchは良いが、Unicode文字を処理しない...
try ResourceLib
私は追加のツールなしでそれをやっています。 Win32アプリプロジェクトに次のファイルを追加しました。
リソースファイルやプログラムコードで再利用できる定数を定義する1つのヘッダーファイル。維持する必要があるファイルは1つだけです。 Qtプロジェクトでそれを行う方法を教えてくれたQtチームのおかげで、Win32アプリでも動作するようになりました。
---- [version.h] ----
#ifndef VERSION_H
#define VERSION_H
#define VER_FILEVERSION 0,3,0,0
#define VER_FILEVERSION_STR "0.3.0.0\0"
#define VER_PRODUCTVERSION 0,3,0,0
#define VER_PRODUCTVERSION_STR "0.3.0.0\0"
#define VER_COMPANYNAME_STR "IPanera"
#define VER_FILEDESCRIPTION_STR "Localiza archivos duplicados"
#define VER_INTERNALNAME_STR "MyProject"
#define VER_LEGALCOPYRIGHT_STR "Copyright 2016 [email protected]"
#define VER_LEGALTRADEMARKS1_STR "All Rights Reserved"
#define VER_LEGALTRADEMARKS2_STR VER_LEGALTRADEMARKS1_STR
#define VER_ORIGINALFILENAME_STR "MyProject.exe"
#define VER_PRODUCTNAME_STR "My project"
#define VER_COMPANYDOMAIN_STR "www.myurl.com"
#endif // VERSION_H
---- [MyProjectVersion.rc] ----
#include <windows.h>
#include "version.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILEVERSION
PRODUCTVERSION VER_PRODUCTVERSION
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", VER_COMPANYNAME_STR
VALUE "FileDescription", VER_FILEDESCRIPTION_STR
VALUE "FileVersion", VER_FILEVERSION_STR
VALUE "InternalName", VER_INTERNALNAME_STR
VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR
VALUE "LegalTrademarks1", VER_LEGALTRADEMARKS1_STR
VALUE "LegalTrademarks2", VER_LEGALTRADEMARKS2_STR
VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR
VALUE "ProductName", VER_PRODUCTNAME_STR
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END
実際にFVIEを ダウンロードリンク からダウンロードして、任意の.exeファイルの情報を編集してみてください。
(OR)
StampVer – Win32バージョンリソーススタンピングを ダウンロードリンク からダウンロードできます。これはWindows .exeファイルに非常に便利です。
(OR)
RCEDITというコマンドツールを使用できます。 Github Source link からダウンロードし、Visual Studio 2015を使用してビルドすると、.exeファイルのバージョンを変更する特定のコマンドがあります。使用可能なさまざまなコマンドについては、 ドキュメントリンク を参照してください。
Heaventools SoftwareからResource Tuner Consoleがあります。
リソースチューナーコンソールは、開発者が多数のWindows 32ビットおよび64ビット実行可能ファイルのさまざまなリソースタイプの編集を自動化できるようにするコマンドラインツールです。
詳しくは、 バージョン変数の変更とバージョン情報の更新 ページをご覧ください。
パーティーに少し遅れましたが、探していたので(そしてまたいつか見つける必要があるかもしれません)、以下にC++ DLLの下にバージョン、会社名などを含めるためにしたことを示します。 VS2013 Express:
お役に立てれば!
[AngusJ]:Resource Hacker から最新バージョン(5.1.7)をダウンロードしました。必要な情報はすべて、そのページにあります(コマンドラインオプション、スクリプトなど)。次のウォークスルーでは、(明らかな理由で)cwdにコピーした2つの実行可能ファイル(実験用ラット)を操作します。
先に進む前に、ResourceHackerには面白い端末出力があり、次のコピー/貼り付けフラグメントは少し混乱を生じます。
これは、環境に精通し、ファンキーなビジネスが行われていないことを示すための、予備的なステップのようなものです...
e:\Work\Dev\StackOverflow\q000284258>dir Volume in drive E is Work Volume Serial Number is 3655-6FED Directory of e:\Work\Dev\StackOverflow\q000284258 2019-01-28 20:09 <DIR> . 2019-01-28 20:09 <DIR> .. 2016-11-03 09:17 5,413,376 cmake.exe 2019-01-03 02:06 5,479,424 ResourceHacker.exe 2019-01-28 20:30 496 ResourceHacker.ini 3 File(s) 10,893,296 bytes 2 Dir(s) 103,723,261,952 bytes free e:\Work\Dev\StackOverflow\q000284258>set PATH=%PATH%;c:\Install\x64\CMake\CMake\3.6.3\bin e:\Work\Dev\StackOverflow\q000284258>.\cmake --help >nul 2>&1 e:\Work\Dev\StackOverflow\q000284258>echo %errorlevel% 0 e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -help e:\Work\Dev\StackOverflow\q000284258> ================================== Resource Hacker Command Line Help: ================================== -help : displays these abbreviated help instructions. -help commandline : displays help for single commandline instructions -help script : displays help for script file instructions. e:\Work\Dev\StackOverflow\q000284258>echo %errorlevel% 0
ご覧のように、実行可能ファイルは問題なく、正常に実行されます。次のように、Details(気にすること)は次のようになります。
リソースファイルは、リソースを含むテキストファイルです。リソース(簡略化)には次のものがあります。
詳細については、 [MS.Docs]:リソースファイルについて を確認してください。次のようなリソースファイルの編集を容易にする多くのツール(既存の回答に記載されています)があります。
しかし、それはResource Hackerであり、そして:
このステップで使用します(-action extract
)
次に、リソースを。exe(。dll、...)に埋め込むには、compiledバイナリにする必要がありますPE形式に適合するフォーム。繰り返しますが、これを達成できるツールはたくさんありますが、おそらくご想像のとおり、私はResource Hacker(-action compile
)に固執します。
e:\Work\Dev\StackOverflow\q000284258>:: Extract the resources into a file e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con e:\Work\Dev\StackOverflow\q000284258> [28 Jan 2019, 20:58:03] Current Directory: e:\Work\Dev\StackOverflow\q000284258 Commandline: .\ResourceHacker.exe -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con Open : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe Save : e:\Work\Dev\StackOverflow\q000284258\sample.rc Success! e:\Work\Dev\StackOverflow\q000284258>:: Modify the resource file and set our own values e:\Work\Dev\StackOverflow\q000284258> e:\Work\Dev\StackOverflow\q000284258>:: Compile the resource file e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -open .\sample.rc -save .\sample.res -action compile -log con e:\Work\Dev\StackOverflow\q000284258> [28 Jan 2019, 20:59:51] Current Directory: e:\Work\Dev\StackOverflow\q000284258 Commandline: .\ResourceHacker.exe -open .\sample.rc -save .\sample.res -action compile -log con Open : e:\Work\Dev\StackOverflow\q000284258\sample.rc Save : e:\Work\Dev\StackOverflow\q000284258\sample.res Compiling: e:\Work\Dev\StackOverflow\q000284258\sample.rc Success! e:\Work\Dev\StackOverflow\q000284258>dir /b cmake.exe ResourceHacker.exe ResourceHacker.ini sample.rc sample.res
あなたの場合、リソースファイルを保存して編集する必要はありません。ファイルは既に存在するので、私は目的を示すためだけにそれをしました。その下は、変更後(およびコンパイル前)のリソースファイルです。
sample.rc:
1 VERSIONINFO
FILEVERSION 3,1,4,1592
PRODUCTVERSION 2,7,1,8
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "040904E4"
{
VALUE "CompanyName", "Cristi Fati\0"
VALUE "FileDescription", "20190128 - SO q000284258 demo\0"
VALUE "FileVersion", "3.1.4.1592\0"
VALUE "ProductName", "Colonel Panic\0"
VALUE "InternalName", "100\0"
VALUE "LegalCopyright", "(c) Cristi Fati 1999-2999\0"
VALUE "OriginalFilename", "ResHack\0"
VALUE "ProductVersion", "2.7.1.8\0"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0409 0x04E4
}
}
これはResource Hacker(-action addoverwrite
)でも実行されます。 。exe sは既にコピーされているため、リソースを適切に編集します。
e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con e:\Work\Dev\StackOverflow\q000284258> [28 Jan 2019, 21:17:19] Current Directory: e:\Work\Dev\StackOverflow\q000284258 Commandline: .\ResourceHacker.exe -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con Open : e:\Work\Dev\StackOverflow\q000284258\cmake.exe Save : e:\Work\Dev\StackOverflow\q000284258\cmake.exe Resource: e:\Work\Dev\StackOverflow\q000284258\sample.res Added: VERSIONINFO,1,1033 Success! e:\Work\Dev\StackOverflow\q000284258>copy ResourceHacker.exe ResourceHackerTemp.exe 1 file(s) copied. e:\Work\Dev\StackOverflow\q000284258>.\ResourceHackerTemp.exe -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con e:\Work\Dev\StackOverflow\q000284258> [28 Jan 2019, 21:19:29] Current Directory: e:\Work\Dev\StackOverflow\q000284258 Commandline: .\ResourceHackerTemp.exe -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con Open : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe Save : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe Resource: e:\Work\Dev\StackOverflow\q000284258\sample.res Modified: VERSIONINFO,1,1033 Success! e:\Work\Dev\StackOverflow\q000284258>del /f /q ResourceHackerTemp.* e:\Work\Dev\StackOverflow\q000284258>dir Volume in drive E is Work Volume Serial Number is 3655-6FED Directory of e:\Work\Dev\StackOverflow\q000284258 2019-01-28 21:20 <DIR> . 2019-01-28 21:20 <DIR> .. 2016-11-03 09:17 5,414,400 cmake.exe 2019-01-03 02:06 5,479,424 ResourceHacker.exe 2019-01-28 21:17 551 ResourceHacker.ini 2019-01-28 20:05 1,156 sample.rc 2019-01-28 20:59 792 sample.res 5 File(s) 10,896,323 bytes 2 Dir(s) 103,723,253,760 bytes free
ご覧のとおり、使用中に。exeを変更できないため(gainarie)少し変更する必要がありました(少なくとも、できるとは思わない)。
これは、次のことを確認するためのオプションのフェーズです。
e:\Work\Dev\StackOverflow\q000284258>.\cmake --help >nul 2>&1 e:\Work\Dev\StackOverflow\q000284258>echo %errorlevel% 0 e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -help e:\Work\Dev\StackOverflow\q000284258> ================================== Resource Hacker Command Line Help: ================================== -help : displays these abbreviated help instructions. -help commandline : displays help for single commandline instructions -help script : displays help for script file instructions. e:\Work\Dev\StackOverflow\q000284258>echo %errorlevel% 0
そして、彼らの詳細:
これは私が仕事で見た中で最高のツールで、VersionInfoを含むすべてのファイルリソースを完全に制御できます。
参照: ResourceEditor by Anders Melander .
reverse engineering
のようなInteractive Disassembler
には多くのツールがあり、これを見るために他のツールの多くの情報を変更できます。 https://www.apriorit.com/dev-blog/366- software-reverse-engineering-tools 。これらのツールを試してみてください https://alternativeto.net/software/xn-resource-editor/