我使用以下代码来获取我的应用程序的 EXE 版本。代码在FormCreate中:
procedure Tform1.FormCreate(Sender: TObject);
var
vMajor, vMinor, vRelease, vBuild: DWord;
size, len: longword;
handle: DWord;
buffer: pchar;
pinfo: ^VS_FIXEDFILEINFO;
begin
try
size := GetFileVersionInfoSize(Pointer(Application.ExeName), handle);
if size > 0 then begin
GetMem(buffer, size);
if GetFileVersionInfo(Pointer(Application.ExeName), 0, size, buffer)
then
if VerQueryValue(buffer, '\', pointer(pinfo), len) then begin
VMajor := HiWord(pinfo.dwFileVersionMS);
VMinor := LoWord(pinfo.dwFileVersionMS);
VRelease := HiWord(pinfo.dwFileVersionLS);
VBuild := LoWord(pinfo.dwFileVersionLS);
end;
end;
finally
FreeMem(buffer);
end;
…
代码在 32 位调试和发布配置以及 64 位调试中按预期工作。它返回当前版本,即 2022.4.112.891。
但是,在 64 位 Release 配置中,VRelease 和 VBuild 不正确,代码返回 2022.4.8614.28017。
32 位版本和 64 位版本的 GetFileVersionInfoSize 是相同的,这是我所期望的。
64位调试和发布配置之间有什么区别会导致调用失败?