Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Вниз

Как правильно определять версию файла ?   Найти похожие ветки 

 
b/@. ©   (2009-06-12 12:48) [0]

Нашел несколько примеров, только все они противоречивые:
вот первый
http://kladovka.net.ru/delphibase/?action=viewfunc&topic=fileattr&id=10389
еще один
http://kladovka.net.ru/delphibase/?action=viewfunc&topic=fileattr&id=10055
самый короткий
http://www.delphisources.ru/pages/faq/base/file_version.html

Так а как всётаки правильно ?


 
palva ©   (2009-06-12 18:06) [1]

У файла не бывает версии. Если он лежит в NTFS, то можно вытащить дату его создания. Может быть, это поможет.


 
Игорь Шевченко ©   (2009-06-13 00:39) [2]


> Так а как всётаки правильно ?


http://www.delphisources.ru/pages/faq/base/file_version.html

по крайней мере за 10 лет этот метод не подводил

В остальные не смотрел, бо наворочено


 
Германн ©   (2009-06-13 00:44) [3]


> Игорь Шевченко ©   (13.06.09 00:39) [2]
>
>
> > Так а как всётаки правильно ?
>
>
> http://www.delphisources.ru/pages/faq/base/file_version.
> html
>

И это способ определения версии любого файла?
:)


 
Игорь Шевченко ©   (2009-06-13 01:48) [4]

Германн ©   (13.06.09 00:44) [3]


> И это способ определения версии любого файла?
> :)


Безусловно любого, абы он соответствовал формату PE и имел ресурс типа RT_VERSION


 
Германн ©   (2009-06-13 02:30) [5]


> Безусловно любого, абы он соответствовал формату PE и имел
> ресурс типа RT_VERSION
>

Ну да, ну да.


 
Нат ©   (2009-06-13 03:36) [6]

Для начала, зачем автору номер версии?
Красиво нарисовать на заставке?
Тогда это не поможет.
Прежде чем читать, номер версии придется записать.


 
b/@. ©   (2009-06-15 10:49) [7]

Да-да-да :)
Автору номер версии нужен именно для того, чтобы красиво нарисовать на заставке.
А еще из-за того, что эта форма общая для нескольких программ и соответсвенно имя программы и версия у них разное.


> Игорь Шевченко ©   (13.06.09 00:39) [2]

В SysUtils неожиданно нашлась фунция GetFileVersion :)


 
oldman ©   (2009-06-15 11:00) [8]


> b/@. ©   (15.06.09 10:49) [7]
> В SysUtils неожиданно нашлась фунция GetFileVersion :)


Поищи еще SetFileVersion :)


 
Игорь Шевченко ©   (2009-06-15 12:43) [9]

b/@. ©   (15.06.09 10:49) [7]


> В SysUtils неожиданно нашлась фунция GetFileVersion :)


Мне, например, такая реализация не годится -
"It generally does not include the release or build numbers."

если посмотреть ее код и код в
> http://www.delphisources.ru/pages/faq/base/file_version.html


то видно, что в первом случае берется только FixedInfo.dwFileVersionMS, а во втором еще и FixedInfo.dwFileVersionLS


 
b/@. ©   (2009-06-15 15:14) [10]


> Игорь Шевченко ©   (15.06.09 12:43) [9]
> то видно, что в первом случае берется только FixedInfo.dwFileVersionMS, а во втором еще и FixedInfo.dwFileVersionLS

Думаю это уже мелочи :)
Меня больше интересовали аргументы VerQueryValue(VerBuf, "\", Pointer(FI), VerSize)

Есть еще один вопрос, но спрошу уже в новой теме.


 
b/@. ©   (2009-06-16 12:33) [11]

Вот какая странная получилась собственная версия :)

function GetVersion(const AFileName: string; out AVersion: string): boolean;
resourcestring
 SEmpty = "filename is empty";
 SExist = "file not exist";
 SSize  = "version info not included ";
 SAlloc = "memory allocation error";
 SInfo  = "getting version info fail";
 SValue = "query value failed";
 SLen0  = "query value length = 0";
 SSigna = "wrong version info signature";
const
 SVersion = "%d.%d.%d.%d";
type
 LPVOID = pointer;
var
 Filename: string;

 lptstrFilename: LPTSTR;
 dwHandle: DWORD;
 dwLen: DWORD;
 lpData: LPVOID;
 pFileInfo: ^VS_FIXEDFILEINFO;
 puLen: UINT;

 major: WORD;
 minor: WORD;
 relea: WORD;
 build: WORD;
begin
 result := false;

 if Length(AFileName) = 0
 then begin
   AVersion := SEmpty;
   exit;
 end;

 if not FileExists(AFileName)
 then begin
   AVersion := SExist;
   exit;
 end;

 Filename := AFileName;
 UniqueString(Filename);
 lptstrFilename := LPTSTR(Filename);

 dwLen := GetFileVersionInfoSize(lptstrFilename, dwHandle);
 if dwLen = 0
 then begin
   AVersion := SSize;
   exit;
 end;

 try
   lpData := AllocMem(dwLen);
 except
   AVersion := SAlloc;
   exit;
 end;

 try
   if not GetFileVersionInfo(lptstrFilename, dwHandle, dwLen, lpData)
   then begin
     AVersion := SInfo;
     exit;
   end;

   if not VerQueryValue(lpData, "\", LPVOID(pFileInfo), puLen)
   then begin
     AVersion := SValue;
     exit;
   end;

   if puLen <= 0
   then begin
     AVersion := SLen0;
     exit;
   end;

   if pFileInfo.dwSignature = VS_FFI_SIGNATURE
   then begin
     major := pFileInfo.dwFileVersionMS shr 16;
     minor := pFileInfo.dwFileVersionMS and $FFFF;
     relea := pFileInfo.dwFileVersionLS shr 16;
     build := pFileInfo.dwFileVersionLS and $FFFF;

     AVersion := Format(SVersion, [major, minor, relea, build]);
     result := true;
   end else begin
     AVersion := SSigna;
     exit;
   end;
 finally
   FreeMem(lpData);
 end;
end;


 
Игорь Шевченко ©   (2009-06-16 12:40) [12]

b/@. ©   (16.06.09 12:33) [11]

в
> http://www.delphisources.ru/pages/faq/base/file_version.
> html


короче



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.021 c
2-1245577497
Bred
2009-06-21 13:44
2009.08.16
Цвет шрифта при использовании TextOut


15-1244878087
Unknown user
2009-06-13 11:28
2009.08.16
Декомпозиция полигона на треугольники


2-1245231551
вопрос
2009-06-17 13:39
2009.08.16
увеличение дин.массива


2-1245498247
Mouse
2009-06-20 15:44
2009.08.16
Количество нажатий кнопки мыши


2-1245159163
NaRuTo
2009-06-16 17:32
2009.08.16
TCustomControl?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский