Библиотека knigago >> Компьютеры: Языки и системы программирования >> Pascal, Delphi, Lazarus и т.п. >> Как получить информацию об исполняемом файле в Lazarus

Ильдар Насибуллаев - Как получить информацию об исполняемом файле в Lazarus

Как получить информацию об исполняемом файле в Lazarus
Книга - Как получить информацию об исполняемом файле в Lazarus.  Ильдар Насибуллаев  - прочитать полностью в библиотеке КнигаГо
Название:
Как получить информацию об исполняемом файле в Lazarus
Ильдар Насибуллаев

Жанр:

Статьи и рефераты, Самиздат, сетевая литература, Литература ХXI века (эпоха Глобализации экономики), Программирование: прочее, Pascal, Delphi, Lazarus и т.п.

Изадано в серии:

Статьи по free pascal и lazarus #2

Издательство:

неизвестно

Год издания:

-

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Как получить информацию об исполняемом файле в Lazarus"

В этой статье мы обсудим как добавлять и извлекать информацию об исполняемом файле в Lazarus.
Одним из примеров, когда это может понадобиться, является динамическое отображение номера сборки в приложении. Средства Lazarus, начиная с версии 0.9.6, позволяют это сделать (в предыдущей стабильной версии эта функция работала неправильно, что приводило к ошибке выполнения программы).


Читаем онлайн "Как получить информацию об исполняемом файле в Lazarus". Главная страница.

стр.

Ильдар Насибуллаев КАК ПОЛУЧИТЬ ИНФОРМАЦИЮ ОБ ИСПОЛНЯЕМОМ ФАЙЛЕ В LAZARUS

В этой статье мы обсудим как добавлять и извлекать информацию об исполняемом файле в Lazarus.

Одним из примеров, когда это может понадобиться, является динамическое отображение номера сборки в приложении. Средства Lazarus, начиная с версии 0.9.6, позволяют это сделать (в предыдущей стабильной версии эта функция работала неправильно, что приводило к ошибке выполнения программы).

В качестве примера создадим консольное приложение (хотя те же действия можно сделать в любом другом типе приложений). Сначала включим подключение информации в исполняемый файл проекта. Выбираем в меню Проект → Параметры проекта → Информация о версии. Во вкладке ставил флажки напротив пунктов «Добавлять информацию о версии в исполняемый файл» и «Автоматически наращивать номер сборки». Первый пункт означает, что информация будет добавляться на этапе компиляции в файл проекта (через файл ресурсов *.rc). Второй параметр означает, что при каждой компиляции номер сборки автоматически увеличивается на единицу. Без вопросов, удобная функция.

Заполняем в той же вкладке основную информацию. Можно добавить дополнительную информацию перейдя по кнопке Дополнительно. Отметим, что если оставить последнее поле (Версия продукта) пустой, то при компиляции это поле принимает значение текущей версии сборки. При дальнейших компиляциях это поле остается без изменений (если нужно его обновить, например, при финальной компиляции релиз-версии, то очищаем его и компилируем по новой). Данное тайное знание добавляет нам сил и расширяет поле для маневров.

Как теперь проверить, что информация добавляется в исполняемый файл? В любом файловом менеджере просматриваем свойства нашего исполняемого файла. Например, в проводнике (если кто пользуется), щелкаем правой кнопкой мыши по нашему файлу и выбираем Свойства. Видим название файла и описание. Остальная информация находится в закладке Версия.

Теперь перейдем к самому интересному. Напишем программу, которая будет читать эту информацию из любого исполняемого файла (если, конечно, эта информация там есть). Нам в этом поможет модуль FileInfo из FCL (Free Component Library). Этот модуль содержится в стандартной поставке Lazarus, так что проблем не должно быть. Пишем в секцию модулей:


uses FileInfo;


В основной программе описываем переменные:


i: Integer;

Version: TFileVersionInfo;

MyFile, MyVersion: String;


За извлечение информации из бинарника отвечает TFileVersionInfo, остальные переменные являются служебными. Создаем класс Version и связываем его с именем исполняемого файла. Мы сделали проверку на наличие первого входного параметра. Если он задан, то рассматривается как имя внешнего исполняемого файла. Если же программа запускается без параметров, то берем имя нашей программы из нулевого параметра (в этом параметре всегда идет имя исполняемого файла).


Version:=TFileVersionInfo.create(Nil);

If (paramstr(1) <> '') then

   MyFile:=paramstr(1)

else

   MyFile:=paramstr(0);

Version.fileName:=MyFile;


Зачитываем информацию и выводим ее на консоль:


WriteLn(MyFile+' information');

WriteLn('------------------------------------');

With Version do begin

   For i:=0 to VersionStrings.Count-1 do begin

      If VersionCategories[I]='FileVersion' then

         MyVersion := VersionStrings[i];

      WriteLn('['+VersionCategories[I]+']'+'='+VersionStrings[i]);

   end;

end;

Version.Free;


Отметим, следующие моменты. Во-первых, вы выделили номер сборки в отдельную переменную FileVersion, т.к. обычно это наиболее востребованная информация. Во-вторых, информацию можно выводить куда угодно, например в метку (в оконном приложении): Label1.Caption := 'Сборка: '+MyVersion;.

Добавим еще несколько строчек в конце (вывод номера сборки) и поставим паузу, чтобы консольное окно автоматически не закрывалось (программа завершится при нажатии клавиши Enter).


WriteLn('------------------------------------');

WriteLn('Here app version info: '+MyVersion);

WriteLn('Press "Enter" to exit');

ReadLn();


Теперь запускаем, исправляем лаги, запускаем еще раз и смотрим, что получилось. У вас результат будет несколько отличным от моего (разные компьютеры, разные версии ОС, разные судьбы).

Результат выполнения программы при запуске без параметров:


>fileinfo

D:\Temp\FileInfo\FileInfo.exe information

------------------------------------

[CompanyName]=fsweb.info

[FileDescription]=This is file app version info example

[FileVersion]=0.0.0.22

[InternalName]=FileInfoExample

[LegalCopyright]=Ildar Nasibullayev

[OriginalFilename]=FileInfo

[ProductName]=FileInfo

[ProductVersion]=0.0.0.21

------------------------------------

Here app --">
стр.

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.