GetFileVersionInfoSize爲0(零) 而GetFileVersionInfo返回任何GetFileVersionInfoSize而GetFileVersionInfo任何回報
我使用這樣的:基於堆棧的答覆Get FileVersion with Build
它工作在
function FileVersion(const FileName: TFileName): String;
var
VerInfoSize: Cardinal;
VerValueSize: Cardinal;
Dummy: Cardinal;
PVerInfo: Pointer;
PVerValue: PVSFixedFileInfo;
begin
Result := '';
VerInfoSize := GetFileVersionInfoSize(PChar(FileName), Dummy);
GetMem(PVerInfo, VerInfoSize);
try
if GetFileVersionInfo(PChar(FileName), 0, VerInfoSize, PVerInfo) then
if VerQueryValue(PVerInfo, '\', Pointer(PVerValue), VerValueSize) then
with PVerValue^ do
Result := Format('v%d.%d.%d build %d', [
HiWord(dwFileVersionMS), //Major
LoWord(dwFileVersionMS), //Minor
HiWord(dwFileVersionLS), //Release
LoWord(dwFileVersionLS)]); //Build
finally
FreeMem(PVerInfo, VerInfoSize);
end;
end;
大部分情況。
感謝
你沒有檢查'GetFileVersionInfoSize'是否返回了一個有用的值(VerInfoSize> 0)。你也沒有檢查'GetFileVersionInfo'的返回值。添加一個'else',看看'GetLastError'告訴你什麼。 –
是的,我明白了。但是,如果文件存在int正確的路徑,什麼可以讓GetFileVersionInfoSize返回0? – Jlouro
再一次,你需要調用'GetLastError()'來找出它返回0的原因。最有可能的是,文件根本沒有任何可用的版本信息。 –