Sign in Join
Wiki copytemporary

Show Application Title, Version, and Company/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Show Application Title, Version, and Company/ru

OldNewLine
1+## Обзор
2+
3+### Windows
4+
5+С самых ранних версий Microsoft Windows имела возможность хранить информацию о версии и т.д. в исполняемом файле. Поддержка этого была добавлена в Delphi в районе v3 и частично работала в Lazarus 0.9.24.
6+
7+### Linux
8+
9+В формате файла ELF нет неявных положений о номерах версий, авторских правах и так далее, но Lazarus хранит это в разделах ресурсов. Чтение информации во время исполнения программы зависит от модулей FPC, ниже - некоторая полезная информация.
10+
11+### macOS и iOS
12+
13+Для macOS информация о версии файла Lazarus может храниться в двух местах:
14+
15+- исполняемый файл MACH-O (например, в Windows, Linux); см. ниже
16+- комплект приложения (если он есть) в plist. См. [[Mac Show Application Title, Version, and Company]] для получения дополнительной информации.
17+
18+## Реализации
19+
20+### FPC 3.0
21+
22+Реализация в FPC 3.0.x с использованием [[fcl-res]]: см. [[http://wiki.lazarus.freepascal.org/User Changes 3.0|announcement in User Changes 3.0]]
23+
24+В приведенном ниже коде показано, как получить информацию об исполняемых файлах из
25+
26+- .exe/.dll/.ocx (формат Windows) файлов
27+- исполняемых файлов ELF, скомпилированных в Lazarus (Linux),
28+- исполняемых файлов MACH-O, скомпилированных в Lazarus (OSX)
29+
30+``` pascal
31+program printfileinfo;
32+{Отображает информацию о версии файла для
33+- исполняемых файлов Windows PE
34+- исполняемых Linux ELF (скомпилированных в Lazarus)
35+- исполняемых файлов MACH-O OSX (скомпилированных в Lazarus)
36+Запускается на Windows, Linux, OSX...
37+}
38+
39+{$mode objfpc}{$H+}
40+{$ifdef mswindows}{$apptype console}{$endif}
41+uses
42+ {$IFDEF UNIX}{$IFDEF UseCThreads}
43+ cthreads,
44+ {$ENDIF}{$ENDIF}
45+ Classes,sysutils
46+ // FPC 3.0 fileinfo читает ресурсы exe, пока вы регистрируете соответствующие модули
47+ , fileinfo
48+ , winpeimagereader {это нужно для чтения информации exe}
49+ , elfreader {необходимо для чтения исполняемых файлов ELF}
50+ , machoreader {необходимо для чтения исполняемых файлов MACH-O}
51+ ;
52+
53+var
54+ FileVerInfo: TFileVersionInfo;
55+
56+{$R *.res}
57+
58+begin
59+ FileVerInfo:=TFileVersionInfo.Create(nil);
60+ try
61+ FileVerInfo.ReadFileInfo;
62+ writeln('Company: ',FileVerInfo.VersionStrings.Values['CompanyName']);
63+ writeln('File description: ',FileVerInfo.VersionStrings.Values['FileDescription']);
64+ writeln('File version: ',FileVerInfo.VersionStrings.Values['FileVersion']);
65+ writeln('Internal name: ',FileVerInfo.VersionStrings.Values['InternalName']);
66+ writeln('Legal copyright: ',FileVerInfo.VersionStrings.Values['LegalCopyright']);
67+ writeln('Original filename: ',FileVerInfo.VersionStrings.Values['OriginalFilename']);
68+ writeln('Product name: ',FileVerInfo.VersionStrings.Values['ProductName']);
69+ writeln('Product version: ',FileVerInfo.VersionStrings.Values['ProductVersion']);
70+ finally
71+ FileVerInfo.Free;
72+ end;
73+end.
74+```
75+
76+### Реализации с использованием устаревшего FPC 2.6.x
77+
78+Использует [[fcl-res]]; вклад через список рассылки: [1](http://lists.lazarus.freepascal.org/pipermail/lazarus/attachments/20100723/8db6b97e/attachment.ksh)
79+
80+Используйте это как
81+
82+``` pascal
83+uses
84+ resource, versiontypes, versionresource;
85+
86+ FUNCTION resourceVersionInfo: STRING;
87+
88+ (* В отличие от большинства AboutText (см.ниже), это требует значительных усилий *)
89+ (* во время выполнения программы для извлечения номеров версий/выпусков/сборок из *)
90+ (* информации о ресурсах, добавленной в двоичный файл. *)
91+
92+ VAR Stream: TResourceStream;
93+ vr: TVersionResource;
94+ fi: TVersionFixedInfo;
95+
96+ BEGIN
97+ RESULT:= '';
98+ TRY
99+
100+ (* Это вызывет исключение, если информация о версии не была включена в двоичный *)
101+ (* файл (Lazarus Project -> Project Options -> Version Info -> Version *)
102+ (* numbering). *)
103+
104+ Stream:= TResourceStream.CreateFromID(HINSTANCE, 1, PChar(RT_VERSION));
105+ TRY
106+ vr:= TVersionResource.Create;
107+ TRY
108+ vr.SetCustomRawDataStream(Stream);
109+ fi:= vr.FixedInfo;
110+ RESULT := 'Version ' + IntToStr(fi.FileVersion[0]) + '.' + IntToStr(fi.FileVersion[1]) +
111+ ' release ' + IntToStr(fi.FileVersion[2]) + ' build ' + IntToStr(fi.FileVersion[3]) + eol;
112+ vr.SetCustomRawDataStream(nil)
113+ FINALLY
114+ vr.Free
115+ END
116+ FINALLY
117+ Stream.Free
118+ END
119+ EXCEPT
120+ END
121+ END { resourceVersionInfo } ;
122+```
123+
124+Использоаавние vinfo: [здесь](http://forum.lazarus.freepascal.org/index.php?topic=12435.0) и [здесь](http://forum.lazarus.freepascal.org/index.php?topic=13957.0)
125+
126+## Советы по теме
127+
128+### Ревизии SVN/Git/Hg/Mercurial
129+
130+Используйте `$(lazarusdir)/tools/svn2revisioninc` для получения номера ревизии (из репозиториев subversion, git или mercurial) в файле revision.inc, например что-то вроде:
131+
132+``` pascal
133+// Создан при помощи Svn2RevisionInc
134+const RevisionStr = '43594';
135+```
136+
137+## Хаки только для Unix-систем
138+
139+Они работают с Linux на различных платформах и, вероятно, с Solaris при условии, что установлены утилиты, производные от GNU.
140+
141+### Получение информации о версии Subversion в виде строки, доступной для программы
142+
143+Вставьте это в Project options -\> Compilation -\> Execute before -\> Command:
144+
145+``` bash
146+ /bin/sh -c "echo -n C`svnversion -n`C |tr A-G %-+ >project_svnrevision.inc"
147+```
148+
149+Note quote and backtick positions. The tr is converting C into another layer of quotes which is necessary for things to work as required. Обратите внимание на кавычки и обратные кавычки. `Tr` преобразует `C` в другой уровень цитат, который необходим для того, чтобы все работало должным образом.
150+
151+Поместите это в программу:
152+
153+``` pascal
154+ (*$IFDEF UNIX *)
155+ rev= (*$I project_svnrevision.inc *) ;
156+ (*$ELSE *)
157+ rev= 'unimplemented';
158+ (*$ENDIF *)
159+```
160+
161+Обратите внимание, что это должна быть строка, так как номер версии будет иметь нечисловой суффикс, если проект был обновлен с момента его последней фиксации.
162+
163+### Переименование окончательного исполняемого файла, чтобы включить в его название платформу и метку времени
164+
165+Вставьте это в Project options -\> Paths -\> Unit output directory:
166+
167+``` bash
168+ lib/$(TargetCPU)-$(TargetOS)
169+```
170+
171+Вставьте это в Project options -\> Paths -\> Target file name:
172+
173+``` bash
174+ UnyokedBackend-$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)
175+```
176+
177+Убедитесь, что установлена галочка "Apply conventions"(Применить соглашения). Это может немного отличаться в зависимости от версии IDE и компилятора/компоновщика.
178+
179+Вставьте это в Project options -\> Compilation -\> Execute after -\> Command:
180+
181+``` bash
182+ /bin/sh -c "mv libunyokedbackend-$(TargetCPU)-$(TargetOS)-$(LCLWidgetType).so UnyokedBackend-$(TargetCPU)-$(TargetOS)-$(LCLWidgetType).`date +%F.%R`.so"
183+```
184+
185+Это должна быть одна строка. Обратите внимание на кавычки и обратные кавычки.
186+
187+---
188+*From the Free Pascal wiki, page "Show Application Title, Version, and Company/ru", as it stood on 2020-08-18 after a change by Zoltanleo, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
189+Category: Code
190+Category: FPC
191+Category: Lazarus
192+Category: Linux
193+Category: Windows
194+Category: macOS

Back to history