Текущий архив: 2004.08.08;
Скачать: CL | DM;
ВнизКак извлечь версию файла из произвольного файла? Найти похожие ветки
← →
Sormy (2004-06-26 11:32) [0]Как извлечь версию файла из произвольного файла?
Под KOL есть отдельна фича или через WinAPI надо?
← →
SPeller © (2004-06-26 14:37) [1]Под KOL ничего особого нет.
← →
Sormy (2004-06-26 14:54) [2]А как средствами Дельфи или WinAPI это реализовать?
← →
YuRock © (2004-06-26 15:13) [3]Если Вы имеете в виду по "версией файла" - версию бинарника, то вот, например:
function GetVersionData(FileName: String; var ProductName, Version, FileVersion: String): Boolean;
var
pRes: Pointer;
Len, ResLen: Cardinal;
vi: Pointer;
begin
// Возвращает название программы (тип String) в ProductName
// Возвращает версию программы в виде "9.9" (тип String) в Version
// Возвращает версию файла программы в виде "9.9.9.9" (тип String) в FileVersion
Result := False;
Len := GetFileVersionInfoSize(PChar(FileName), ResLen);
if Len <> 0 then begin
vi := AllocMem(Len);
try
GetFileVersionInfo(PChar(FileName), 0, Len, vi);
if VerQueryValue(vi, "\\StringFileInfo\\041904E3\\ProductName", pRes, ResLen) then ProductName := String(PChar(pRes));
if VerQueryValue(vi, "\\StringFileInfo\\041904E3\\ProductVersion", pRes, ResLen) then Version := String(PChar(pRes));
if VerQueryValue(vi, "\\StringFileInfo\\041904E3\\FileVersion", pRes, ResLen) then FileVersion := String(PChar(pRes));
Result := True;
finally
FreeMem(vi);
end;
end;
end;
← →
Sormy (2004-06-26 20:34) [4]Огромное спасибо, сейчас проверю... :-)
← →
Sormy (2004-06-26 20:51) [5]Странно, но не работает :-(
Всегда в ЛОЖЬ функция срабатывает...
← →
YuRock © (2004-06-26 21:00) [6]А что ты в FileName передаешь?
А есть ли вообще в этом файле структура VERSIONINFO?
← →
Sormy (2004-06-27 00:11) [7]Собственно, полное имя экзншника и передаю... из TKolOpenSaveDialog...
Если в проводнике винды версия файла отображается, то можно судить о присутствии структуры VERSIONINFO? Или же версия может где-нить еще прописана???
← →
YuRock © (2004-06-27 15:27) [8]Да, извини, я лажанулся - надо параметр (у меня он - 041904E3) вначале узнать, а я из своей проги взял :))
Ну ладно, вот еще один (общий для всех) вариант:
function GetVersionData(FileName: String; var Version, FileVersion: String): Boolean;
var
vi: Pointer;
Len, ResLen: Cardinal;
ffi: PVSFixedFileInfo;
begin
// Возвращает версию программы в виде "9.9.9.9" (тип String) в Version
// Возвращает версию файла программы в виде "9.9.9.9" (тип String) в FileVersion
Result := False;
Len := GetFileVersionInfoSize(PChar(FileName), ResLen);
if Len <> 0 then begin
vi := AllocMem(Len);
try
GetFileVersionInfo(PChar(FileName), 0, Len, vi);
if VerQueryValue(vi, "\\", Pointer(ffi), ResLen) and (ResLen <> 0) then begin
Version := Format("%d.%d.%d.%d", [HiWord(ffi^.dwProductVersionMS), LoWord(ffi^.dwProductVersionMS), HiWord(ffi^.dwProductVersionLS), LoWord(ffi^.dwProductVersionLS)]);
FileVersion := Format("%d.%d.%d.%d", [HiWord(ffi^.dwFileVersionMS), LoWord(ffi^.dwFileVersionMS), HiWord(ffi^.dwFileVersionLS), LoWord(ffi^.dwFileVersionLS)]);
end;
Result := True;
finally
FreeMem(vi);
end;
end;
end;
← →
Sormy (2004-06-27 18:19) [9]А этот вариант 100% рабочий? Он у меня тоже не работает... Может я что-то недопонимаю?
← →
YuRock © (2004-06-27 18:41) [10]100%. Я проверял.
Если не работает - значит 1 или 2 причины:
1. Нет файла;
2. В файл не зашита версия.
Протрассируй - посмотри, какой получается длина Len и ResLen - они не должны быть равными 0.
← →
Sormy (2004-06-28 00:34) [11]Обе равны нулю...
Файл существует...
В Файл зашита версия...
Может глючить из-за KOL"a или из-за замены системных библиотек???
← →
mdw (2004-06-28 10:43) [12]Вот попробуй: http://www.mdvkol.narod.ru/KolVerInfo.zip. Когда-то конвертил в KOL из RX.
← →
Sormy (2004-06-28 12:30) [13]Линк не работает.
Если у Вас есть этот модуль, то не могли бы Вы его кинуть мне на мыло sormy|@|mail.ru? Он ведь немного весит?
← →
Ozone © (2004-06-28 12:45) [14]Sormy (28.06.04 12:30) [13]
Почку последнюю у лика убери и все заработает
← →
Sormy (2004-06-28 13:14) [15]Да, что-то стормозил я с точкой :-))
Качается все...
А можно небольшой примерчик использования модуля?
← →
Sormy (2004-06-28 13:17) [16]Стормозил что-то я с точкой :-))
качается все...
А можно небольшой примерчик использования модуля?
← →
Sormy (2004-06-28 13:25) [17]2 mdw:
Спасибо! Сам разобрался - все работает прекрасно...
Еще раз огромное спасибо...
Страницы: 1 вся ветка
Текущий архив: 2004.08.08;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.038 c