Как сделать так, чтобы строка появлялась в начале скомпилированного двоичного исполняемого файла? - PullRequest
1 голос
/ 06 февраля 2020

Использование G CC и C ++ 11 на Windows и Debian для armhf.

Мне нужно проверить строку версии исполняемого файла, чтобы увидеть, работает ли мое приложение Я должен сам обновиться.

Моя "строка версии" сделана следующим образом:

#define VersionFileCap "-[+@+]-"
const char VersioneFile[] = { VersionFileCap MYAPP_VERSION "," __DATE__ VersionFileCap };

, и я могу видеть ее в скомпилированном двоичном файле.

Мой план найти VersionFileCap s и затем управлять найденной строкой. Для этого я собираюсь использовать код в ответе на этот вопрос , но он загружает весь файл в память, и это беспокоит меня, так как мой исполняемый файл может легко стать больше, чем 50 МБ.

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

Возможно ли это, просто используя некоторые препроцессор / компилятор magi c параметры?

1 Ответ

0 голосов
/ 06 февраля 2020

правильный способ справиться с этим, по крайней мере на Windows, заключается в сохранении значений версии вашего приложения в VERSIONINFO ресурсе приложения , а не в строке в код приложения.

Если приложение хочет использовать информацию о версии для заполнения массива VersioneFile[], оно может делать это динамически во время выполнения.

Microsoft имеет функции Win32 API, специально предназначенные для запроса данных. из ресурса VERSIONINFO исполняемого файла (EXE или DLL):

GetFileVersionInfoSize()

GetFileVersionInfo()

VerQueryValue()

Ваше приложение может запрашивать собственные данные версии. Внешний модуль обновления может запрашивать данные версии вашего приложения.

API Win32 может получить доступ к ресурсам исполняемого файла без необходимости загрузки всего файла в память за один раз.

См. Информация о версии на MSDN для более подробной информации.

...