68

bash スクリプト (Cygwin) を使用して処理できるように、標準の Windows DLL バージョン情報をダンプするコマンド ライン ツールが必要です。

Java 開発者として、私は Microsoft 開発ツールにあまり慣れていません (ただし、Microsoft Visual Embedded C++ 4.0 と Microsoft Visual Basic 6.0 の経験は少しあります)。

SO に記載されているように、適切なツールはmt.exeのようです。ただし、この小さなアプリケーションを入手する唯一の方法は、Windows Server 2008 および .NET Framework 用の Windows SDKの 1.29 GB ISO をダウンロードすることです。これが唯一の方法だとは信じられません。

PEViewというインターネット上の小さなアプリケーションも見つけましたが、表示される情報が多すぎて (私の場合は役に立たない)、コマンド ライン アプリケーションではありません。

Cygwin にバンドルされている標準のobjdumpも DLL ファイルに関する情報をダンプできますが、DLL のバージョンをダンプするオプションが表示されません。このツール (-p オプションを使用) によってダンプされる MajorImageVersion、MinorImageVersion、およびその他のフィールドは、独自の DLL バージョンに関連していないことに注意してください。

何をすべきかについての代替案はありますか?いくつかの重要な objdump オプションを見逃したのではないでしょうか? mt.exe しか選択できませんか? この場合、Windows SDK とは別に入手することは可能でしょうか?

4

12 に答える 12

123

PowerShell を使用して、必要な情報を取得できます。

(Get-Item C:\Path\To\MyFile.dll).VersionInfo

デフォルトでは、ProductVersion と FileVersion が表示されますが、完全なVERSIONINFOが利用可能です。いいえ 戻る コメント

(Get-Item C:\Path\To\MyFile.dll).VersionInfo.Comments
于 2012-10-29T09:01:17.040 に答える
61

MicrosoftSysinternalsSigcheckを使用します。このサンプルは、バージョンのみを出力します。

sigcheck -q -n foo.dll

解凍されたsigcheck.exeはわずか228KBです。

于 2009-11-04T14:04:50.953 に答える
10

または、自分で作成することもできます。VSを開き、新しいコンソールアプリケーションを作成します。ATLまたはMFCをサポートしない単純なプロジェクトを作成し、stdafxオプションをオンのままにしますが、「空のプロジェクト」をチェックせずにVersionInfoと呼びます。

VersionInfo.cppとVersionInfo.hの2つのファイルを含む単純なプロジェクトを取得します

cppファイルを開き、以下を貼り付けてからコンパイルします。あなたはそれを実行することができます、最初の引数は完全なファイル名です、それはバージョンリソースブロックに基づいて「製品:5.6.7.8ファイル:1.2.3.4」を出力します。バージョンリソースがない場合は-1を返し、そうでない場合は0を返します。

dll CRTを使用して8kバイナリにコンパイルし、すべてを静的にリンクした60k(C ++オプションで設定、「コード生成ページ、ランタイムオプション」を「/ MT」に変更)

HTH。

PS。Visual Studioを使用したくない場合でも、c ++コンパイラ(指を交差させたもの)を使用してコンパイルしますが、ほぼ確実に#pragmaを変更する必要があります-代わりに、リンカー設定でそのlibを指定します。プラグマはそのライブラリに自動的にリンクするための単なる省略形。


// VersionInfo.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>

#pragma comment(lib, "version.lib")

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD handle = 0;
    DWORD size = GetFileVersionInfoSize(argv[1], &handle);
    BYTE* versionInfo = new BYTE[size];
    if (!GetFileVersionInfo(argv[1], handle, size, versionInfo))
    {
        delete[] versionInfo;
        return -1;
    }
    // we have version information
    UINT    len = 0;
    VS_FIXEDFILEINFO*   vsfi = NULL;
    VerQueryValue(versionInfo, L"\\", (void**)&vsfi, &len);

    WORD fVersion[4], pVersion[4];
    fVersion[0] = HIWORD(vsfi->dwFileVersionMS);
    fVersion[1] = LOWORD(vsfi->dwFileVersionMS);
    fVersion[2] = HIWORD(vsfi->dwFileVersionLS);
    fVersion[3] = LOWORD(vsfi->dwFileVersionLS);
    pVersion[0] = HIWORD(vsfi->dwProductVersionMS);
    pVersion[1] = LOWORD(vsfi->dwProductVersionMS);
    pVersion[2] = HIWORD(vsfi->dwProductVersionLS);
    pVersion[3] = LOWORD(vsfi->dwProductVersionLS);

    printf("Product: %d.%d.%d.%d File: %d.%d.%d.%d\n", 
        pVersion[0], pVersion[1], 
        pVersion[2], pVersion[3], 
        fVersion[0], fVersion[1], 
        fVersion[2], fVersion[3]);
    delete[] versionInfo;

    return 0;
}
于 2009-03-02T23:25:57.317 に答える
3

Systernals の listdlls ツールがその仕事をするかもしれません: http://technet.microsoft.com/en-us/sysinternals/bb896656.aspx

listdlls -v -d mylib.dll
于 2012-12-12T08:03:12.467 に答える
2

CodeProjectには「ShowVer」というコマンドラインアプリケーションがあります。

ShowVer.exeコマンドラインVERSIONINFO表示プログラム

いつものように、アプリケーションにはexeとソースコード(VisualC ++ 6)が付属しています。

Outは、使用可能なすべてのメタデータを出力します。

ドイツのWin7システムでは、user32.dllの出力は次のようになります。

VERSIONINFO for file "C:\Windows\system32\user32.dll":  (type:0)
  Signature:       feef04bd
  StrucVersion:    1.0
  FileVersion:     6.1.7601.17514
  ProductVersion:  6.1.7601.17514
  FileFlagsMask:   0x3f
  FileFlags:       0
  FileOS:          VOS_NT_WINDOWS32
  FileType:        VFT_DLL
  FileDate:        0.0
 LangID: 040704B0
  CompanyName       : Microsoft Corporation
  FileDescription   : Multi-User Windows USER API Client DLL
  FileVersion       : 6.1.7601.17514 (win7sp1_rtm.101119-1850)
  InternalName      : user32
  LegalCopyright    : ® Microsoft Corporation. Alle Rechte vorbehalten.
  OriginalFilename  : user32
  ProductName       : Betriebssystem Microsoft« Windows«
  ProductVersion    : 6.1.7601.17514
 Translation: 040704b0
于 2011-09-12T14:45:12.493 に答える