web-dev-qa-db-ja.com

既存の.exe、.dllのバージョン情報を設定するにはどうすればよいですか?

ビルドプロセスの一環として、コンパイルされたすべてのバイナリのバージョン情報を設定する必要があります。いくつかのバイナリにはすでにバージョン情報があり(コンパイル時に追加されます)、いくつかはありません。

次の情報を適用できるようにしたい:

  • 会社名
  • 著作権表示
  • 商品名
  • 製品説明
  • ファイルバージョン
  • 製品バージョン

これらの属性はすべて、ビルドスクリプトによって指定され、コンパイル後に適用する必要があります。これらは、C++ Builder 2007でコンパイルされた標準のバイナリ(アセンブリではありません)です。

これどうやってするの?

100
Carl

Visual Studioはバッチプロセスではありませんが、ファイルリソースを追加/編集することもできます。

.EXEまたは.DLLでFile-> Open-> Fileを使用するだけです。これは、ビルド後のバージョン情報を修正したり、最初からこれらのリソースを持たないファイルに追加したりするのに便利です。

53
UweBaemayr

他の多くの回答とは異なり、このソリューションでは完全に無料のソフトウェアを使用しています。

まず、次のような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,,,

それでおしまい!

31
Danny Beckett

または、Win32 exe/dllファイル用のフリーウェア StampVer を確認できます。
バージョンリソースが既にある場合でも、ファイルと製品のバージョンのみを変更します。バージョンリソースが存在しない場合は追加できません。

22
Ryan

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タスク もあります。

16
a paid nerd

このようなものはどうですか?

verpatch /va foodll.dll %VERSION% %FILEDESCR% %COMPINFO% %PRODINFO% %BUILDINFO%

使用可能 ここでは完全なソースを使用

14
filofel

このツールがあります ChangeVersion [1]

機能のリスト(ウェブサイトから):

  • コマンドラインインターフェース
  • .EXE、.DLL、および.RESファイルのサポート
  • バージョンマスクに基づいてFileVersionとProductVersionを更新する
  • バージョンキー文字列の追加/変更/削除
  • ファイルフラグの調整(デバッグ、特別、プライベートなど)
  • プロジェクトファイルの更新(.bdsproj | .bpr | .bpk | .dproj)
  • メインアプリケーションアイコンの追加/変更
  • 設定でiniファイルを使用する
  • Windows Vistaのサポート(昇格が必要)
  • 継続的なビルド環境への統合が簡単

完全な開示:私はこのツールを書いた人を知っています、私は彼と一緒に働いていました。しかしこれは、彼が高品質のソフトウェアを作っていることを知っていることも意味します;)


[1] リンクは無効です。 download.cnet.com にミラー化されたバージョンがあるようです。

10
Otherside

verpatchは良いが、Unicode文字を処理しない...
try ResourceLib

8
user581430

私は追加のツールなしでそれをやっています。 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
5
user3016543

実際にFVIEダウンロードリンク からダウンロードして、任意の.exeファイルの情報を編集してみてください。

(OR)

StampVer – Win32バージョンリソーススタンピングダウンロードリンク からダウンロードできます。これはWindows .exeファイルに非常に便利です。

(OR)

RCEDITというコマンドツールを使用できます。 Github Source link からダウンロードし、Visual Studio 2015を使用してビルドすると、.exeファイルのバージョンを変更する特定のコマンドがあります。使用可能なさまざまなコマンドについては、 ドキュメントリンク を参照してください。

2
Subash J

Heaventools SoftwareからResource Tuner Consoleがあります。

リソースチューナーコンソールは、開発者が多数のWindows 32ビットおよび64ビット実行可能ファイルのさまざまなリソースタイプの編集を自動化できるようにするコマンドラインツールです。

詳しくは、 バージョン変数の変更とバージョン情報の更新 ページをご覧ください。

2
Wylder

パーティーに少し遅れましたが、探していたので(そしてまたいつか見つける必要があるかもしれません)、以下にC++ DLLの下にバージョン、会社名などを含めるためにしたことを示します。 VS2013 Express:

  1. 前述のように、dllproj.rcファイルを作成および編集しました。
  2. DLLプロジェクトのビルド前ステップとして「rc.exe dllproj.rc」行を追加しました。
  3. プロジェクトのリソースフォルダにdllproj.resを追加しました。

お役に立てれば!

2
Tom Gordon

リソースハッカー

[AngusJ]:Resource Hacker から最新バージョン(5.1.7)をダウンロードしました。必要な情報はすべて、そのページにあります(コマンドラインオプション、スクリプトなど)。次のウォークスルーでは、(明らかな理由で)cwdにコピーした2つの実行可能ファイル(実験用ラット)を操作します。

  • ResourceHacker.exe:自分で操作するのは面白いと思った
  • cmake.exe:なしのランダム実行可能ファイルバージョン情報設定(v3.6.のマシンへのインストールの一部)

先に進む前に、ResourceHackerには面白い端末出力があり、次のコピー/貼り付けフラグメントは少し混乱を生じます。

1.セットアップ

これは、環境に精通し、ファンキーなビジネスが行われていないことを示すための、予備的なステップのようなものです...

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(気にすること)は次のようになります。

Img0-Initial

2.リソース

リソースファイルは、リソースを含むテキストファイルです。リソース(簡略化)には次のものがあります。

  • 名前
  • タイプ

詳細については、 [MS.Docs]:リソースファイルについて を確認してください。次のようなリソースファイルの編集を容易にする多くのツール(既存の回答に記載されています)があります。

  • VStudioは、新しいプロジェクトを開始するときにデフォルトのものを作成します
  • そのようなファイルを手動で作成できます
  • しかし、それは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  
}
}

3.埋め込み

これは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)少し変更する必要がありました(少なくとも、できるとは思わない)。

4.テスト

これは、次のことを確認するためのオプションのフェーズです。

  • 実行可能ファイルは引き続き機能します(プロセスで混乱することはありませんでした)
  • リソースが追加/更新されました
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

そして、彼らの詳細

Img1-Final

1
CristiFati

これは私が仕事で見た中で最高のツールで、VersionInfoを含むすべてのファイルリソースを完全に制御できます。

参照: ResourceEditor by Anders Melander .

1
J Collins

reverse engineeringのようなInteractive Disassemblerには多くのツールがあり、これを見るために他のツールの多くの情報を変更できます。 https://www.apriorit.com/dev-blog/366- software-reverse-engineering-tools 。これらのツールを試してみてください https://alternativeto.net/software/xn-resource-editor/

0
i_th