或者你可以自己建造一个。打开VS,新建一个控制台应用程序。创建一个不支持 ATL 或 MFC 的简单项目,选中 stdafx 选项但不要选中“空项目”并将其命名为 VersionInfo。
您将获得一个包含 2 个文件的简单项目:VersionInfo.cpp 和 VersionInfo.h
打开cpp文件并将以下内容粘贴到其中,然后编译。您将能够运行它,第一个参数是完整的文件名,它将根据版本资源块打印出“产品:5.6.7.8 文件:1.2.3.4” 。如果没有版本资源,它将返回 -1,否则返回 0。
使用 dll CRT 编译为 8k 二进制文件,60k 静态链接所有内容(在 C++ 选项中设置,将“代码生成页面,运行时选项”更改为“/MT”)
HTH。
PS。如果您不想使用 Visual Studio,它仍将使用任何 c++ 编译器(手指交叉)进行编译,但您几乎肯定必须更改 #pragma - 只需在链接器设置中指定该 lib,pragma 的只是自动链接到该库的简写。
// 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;
}