Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Версия файла

335
22 августа 2005 года
enola
379 / / 25.01.2005
Добрый день!
Народ подскажите как можно версию файла определить? Что-то поиском поискал ничего хорошего не нашел!
310
22 августа 2005 года
fellow
853 / / 17.03.2003
Смотря какого файла :)

Смотри MSDN "Version Information", в частности функцию GetFileVersionInfo.
335
22 августа 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by fellow
Смотря какого файла :)



в частности с расширением exe!

310
22 августа 2005 года
fellow
853 / / 17.03.2003
GetFileVersionInfo
335
22 августа 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by fellow
GetFileVersionInfo



вот что нашел по этой функции:

Код:
/*
KeyName = "Comment" || "ProductName" || "InternalName" ||"OriginalFilename" || "CompanyName" || "FileVersion" || ...
*/

AnsiString __fastcall TMainForm::VersionInfoString (AnsiString FileName, AnsiString KeyName)
{
    AnsiString Info("UNKNOWN");

    char
        * buff(0),
        * info(0);

    DWORD
        null,
        size(GetFileVersionInfoSize(FileName.c_str(), &null));

    if (size)
    {
        buff = new char [ size ];
        if (GetFileVersionInfo(FileName.c_str(), 0, size, buff))
        {
            unsigned int len;
            unsigned short * lang;

            if (VerQueryValue(buff, "\\VarFileInfo\\Translation",
                (void **)&lang, &len))
                VerQueryValue(buff, (AnsiString("\\StringFileInfo\\") +
                    IntToHex(lang[0], 4) + IntToHex(lang[1], 4) + "\\" +
                    KeyName).c_str(), (void **)&info, &len);
            Info = info;
        }
    }

    delete [] buff;

    return Info;
}
335
22 августа 2005 года
enola
379 / / 25.01.2005
а по FTP узнать версию файла можно :) ?
или нужно сначала файл скачать.
13K
22 августа 2005 года
Kerf
4 / / 22.08.2005
Цитата:
Originally posted by enola
вот что нашел по этой функции:
Код:
/*
KeyName = "Comment" || "ProductName" || "InternalName" ||"OriginalFilename" || "CompanyName" || "FileVersion" || ...
*/

AnsiString __fastcall TMainForm::VersionInfoString (AnsiString FileName, AnsiString KeyName)
{
    AnsiString Info("UNKNOWN");

    char
        * buff(0),
        * info(0);

    DWORD
        null,
        size(GetFileVersionInfoSize(FileName.c_str(), &null));

    if (size)
    {
        buff = new char [ size ];
        if (GetFileVersionInfo(FileName.c_str(), 0, size, buff))
        {
            unsigned int len;
            unsigned short * lang;

            if (VerQueryValue(buff, "\\VarFileInfo\\Translation",
                (void **)&lang, &len))
                VerQueryValue(buff, (AnsiString("\\StringFileInfo\\") +
                    IntToHex(lang[0], 4) + IntToHex(lang[1], 4) + "\\" +
                    KeyName).c_str(), (void **)&info, &len);
            Info = info;
        }
    }

    delete [] buff;

    return Info;
}


----
А как насчет GetFileVersionInfoSize?
/*Windows 95/98/Me: The short path form of the specified file name must be less than 126 characters.
*/

И че с эти делать? Какие есть альтернативы?
И еще такая проблема нарисовалась: когда получаешь язык \\VarFileInfo\\Translation, то он может оказаться каким-то "левым"(типа незарегистрированным). И все - дальше я не могу достать информацию. Хотя она там точно есть. Может кто в курсе?

310
22 августа 2005 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by enola
а по FTP узнать версию файла можно :) ?
или нужно сначала файл скачать.


Ну, найди список команд FTP и посмотри, есть ли там подходящие.
А лучше, если уж для себя делаешь обновлялку :) , то давай файлу на ftp имя с указанием версии,например: mycoolapp_2_0_1_1.exe

335
22 августа 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by fellow
А лучше, если уж для себя делаешь обновлялку :) , то давай файлу на ftp имя с указанием версии,например: mycoolapp_2_0_1_1.exe



Вот это да, сегодня столько советов по этому поводу получил, начиная от маркерных файлов, до вот ентого :) спасибо конечно.

362
22 августа 2005 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by Kerf
И еще такая проблема нарисовалась: когда получаешь язык \\VarFileInfo\\Translation, то он может оказаться каким-то "левым"(типа незарегистрированным). И все - дальше я не могу достать информацию. Хотя она там точно есть. Может кто в курсе?



Я использую класс TVersionInfo из библиотеки RX. Там есть все нужные свойства. При этом достаточно одного файла, совсем не обязательно всю библиотеку использовать.

13K
22 августа 2005 года
Kerf
4 / / 22.08.2005
Цитата:
Originally posted by _kolyan
Я использую класс TVersionInfo из библиотеки RX. Там есть все нужные свойства. При этом достаточно одного файла, совсем не обязательно всю библиотеку использовать.


Я вообще-то пишу на MSVС++. А из RX'a реально "выдрать" этот TVersionInfo? И на каких условиях он распростроняется? А то меня это сильно беспокоит(проект комерческий и приходится все соблюдать).

406
22 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Версию по ftp можно узнать с помощью FtpFindFirstFile
362
23 августа 2005 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by Kerf
Я вообще-то пишу на MSVС++. А из RX'a реально "выдрать" этот TVersionInfo? И на каких условиях он распростроняется? А то меня это сильно беспокоит(проект комерческий и приходится все соблюдать).



RX бесплатный. Только вот насчет VC не знаю - файл на паскале. С++Билдер его будет компилить, он понимает паскалевские файлы, а VC вроде нет.

335
23 августа 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by vitaly2003s
Версию по ftp можно узнать с помощью FtpFindFirstFile



спасибо

13K
23 августа 2005 года
Kerf
4 / / 22.08.2005
Цитата:
Originally posted by _kolyan
RX бесплатный. Только вот насчет VC не знаю - файл на паскале. С++Билдер его будет компилить, он понимает паскалевские файлы, а VC вроде нет.


OK. Спаибо. Если станет совсем тяжко, буду разбираться. Но не могли бы Вы проверить как работает RX с файлами у которых Language==0x0 и CharacterSet(CodePage)==0x0. Т.к. если у него с этим проблемы, то и рабираться не стоит. Надеюсь Вас не затруднит моя просьба.

362
23 августа 2005 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by Kerf
OK. Спаибо. Если станет совсем тяжко, буду разбираться. Но не могли бы Вы проверить как работает RX с файлами у которых Language==0x0 и CharacterSet(CodePage)==0x0. Т.к. если у него с этим проблемы, то и рабираться не стоит. Надеюсь Вас не затруднит моя просьба.



Глянул исходник класса - константы неизвестного языка и неизвестной кодовой страницы там присутствуют. Так что, думаю, работать будут постольку, поскольку сама система с ними работает :)
А как именно работают проверить не могу, т.к. не знаю где взять такой файл. Если есть, могу набросать тестовый проект.

13K
23 августа 2005 года
Kerf
4 / / 22.08.2005
Цитата:
Originally posted by _kolyan
Глянул исходник класса - константы неизвестного языка и неизвестной кодовой страницы там присутствуют. Так что, думаю, работать будут постольку, поскольку сама система с ними работает :)
А как именно работают проверить не могу, т.к. не знаю где взять такой файл. Если есть, могу набросать тестовый проект.


Одним из таких файлов является WinRar(так же видел пару инсталях аськи) - посмотрел уже несколько вариантов - одно и тоже. Вот только мне кажется я начал понимать в чем дело. Буду пробовать.

PS Сиба за ответы. Я первый раз решил что-то в форуме спросить(до этого просто читал) и был приятно удивлен... а то часто видишь - надо челу что-то он спрашивает-спрашивает...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог