Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.026 c
4-1088358299
XeLax
2004-06-27 21:44
2004.08.08
что такое хинт?


3-1089724430
STM
2004-07-13 17:13
2004.08.08
НЕ ИСПОЛЬЗУЯ сторонних библиотек Pack dbf


14-1090262286
X9
2004-07-19 22:38
2004.08.08
Lucent Win Modem в Mandrake Linux 9.1


3-1089724493
Helga
2004-07-13 17:14
2004.08.08
Мастера! помогите девушке разобраться с Rave report!


4-1087460946
WwW
2004-06-17 12:29
2004.08.08
Мастера как из своей программы набрать текст в чужом окне