【发布时间】:2018-01-12 06:19:40
【问题描述】:
引用此answer 我正在尝试使用GetFileVersionInfo 方法获取带有Windows Api 的ProductVersion。问题是通过 .exe ProductVersion 的属性是可见的,但通过编程我只得到“0.0.0.0”。
.exe 属性:
输出:
代码:
printf( "File Version 1: %d.%d.%d.%d\n",
( verInfo->dwFileVersionMS >> 16 ) & 0xffff,
( verInfo->dwFileVersionMS >> 0 ) & 0xffff,
( verInfo->dwFileVersionLS >> 16 ) & 0xffff,
( verInfo->dwFileVersionLS >> 0 ) & 0xffff
);
printf( "File Version 2: %d.%d.%d.%d\n",
( verInfo->dwFileVersionLS >> 24 ) & 0xff,
( verInfo->dwFileVersionLS >> 16 ) & 0xff,
( verInfo->dwFileVersionLS >> 8 ) & 0xff,
( verInfo->dwFileVersionLS >> 0 ) & 0xff
);
printf( "Product Version 1: %d.%d.%d.%d\n",
( verInfo->dwProductVersionLS >> 24 ) & 0xff,
( verInfo->dwProductVersionLS >> 16 ) & 0xff,
( verInfo->dwProductVersionLS >> 8 ) & 0xff,
( verInfo->dwProductVersionLS >> 0 ) & 0xff
);
printf( "Product Version 2: %d.%d.%d.%d\n",
(verInfo->dwProductVersionMS >> 16) & 0xffff,
(verInfo->dwProductVersionMS >> 0) & 0xffff,
(verInfo->dwProductVersionLS >> 16) & 0xffff,
(verInfo->dwProductVersionLS >> 0) & 0xffff
);
printf( "Product Version 3: %d.%d.%d.%d\n",
(verInfo->dwProductVersionMS >> 16) & 0xffff,
(verInfo->dwProductVersionMS >> 8) & 0xffff,
(verInfo->dwProductVersionLS >> 16) & 0xffff,
(verInfo->dwProductVersionLS >> 8) & 0xffff
);
问题是 - WTF?如何获得 ProductVersion,微软的人是如何做到的?
【问题讨论】:
-
How do I read from a version resource in Visual C++ 的可能重复项。您正在寻找的是来自特定语言(或中性)
StringFileInfo的ProductVersion。 -
您在对话框中看到的只是字符串部分。但与更新或安装程序相关的是 VERSIONINFO 部分中的 DWORD
-
顺便说一句,您的代码中只有“文件版本 1”和“产品版本 2”是正确的。其他人使用不正确的换档。每个组件的版本号都是16位的,
dwProductVersionMS和dwProductVersionLS各存储两个组件。
标签: c++ winapi version exe fileversioninfo