Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ошибки в МETA-данных EXE: Искажение данных и их устранение в Delphi и Pascal

Delphi , Интернет и Сети , Браузер

В статье будет рассмотрена проблема искажения данных в метаданных EXE файлов, возникающая при использовании внешнего файла verinfo.rc для генерации информации о скомпилированном EXE файле в среде разработки Delphi. Проблема заключается в том, что при просмотре деталей скомпилированного EXE файла в Проводнике Windows, некоторые данные могут быть искажены, и вместо ожидаемого текста могут отображаться странные символы. Это может быть вызвано неправильным форматированием строк в ресурсе версии.

Оригинальный заголовок:

Ошибки в МETA-данных EXE: Искажение данных и их устранение в Delphi

Описание проблемы (вопрос):

Разработчики, использующие внешний файл verinfo.rc для создания метаданных EXE файла, сталкиваются с проблемой искажения данных. В файле verinfo.rc используются различные блоки и значения для хранения информации о файле, такой как описание файла, компания-разработчик, название продукта и т.д. Пример содержимого файла verinfo.rc:

VS_VERSION_INFO VERSIONINFO
FILEVERSION             1,0,0,0
PRODUCTVERSION          1,0,0,0
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
        VALUE "Comments",         "Company Soft"
        VALUE "CompanyName",      "Company2"
        VALUE "FileDescription",  "Company Soft"
        VALUE "FileVersion",      "x.x.x.x"
        VALUE "InternalName",     "Company Soft"
        VALUE "LegalCopyright",   "Company2"
        VALUE "OriginalFilename", "abrev.exe"
        VALUE "ProductName",      "Company Soft"
        VALUE "ProductVersion",   "x.x.x.x"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x0409,1200
    END
END

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

Альтернативный ответ и устранение проблемы

Один из способов устранения ошибки заключается в добавлении нулевого терминатора (\0) в конце каждой строки. Это стандартная практика при работе с строками в ресурсах. Пример исправленного файла verinfo.rc:

VS_VERSION_INFO VERSIONINFO
FILEVERSION             1,0,0,0
PRODUCTVERSION          1,0,0,0
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
        VALUE "Comments",         "Company Soft\0"
        VALUE "CompanyName",      "Company2\0"
        VALUE "FileDescription",  "Company Soft\0"
        VALUE "FileVersion",      "x.x.x.x\0"
        VALUE "InternalName",     "Company Soft\0"
        VALUE "LegalCopyright",   "Company2\0"
        VALUE "OriginalFilename", "abrev.exe\0"
        VALUE "ProductName",      "Company Soft\0"
        VALUE "ProductVersion",   "x.x.x.x\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x0409,1200
    END
END

Документация по ресурсу версии также рекомендует использовать нулевой терминатор для всех частей данных. Например:

#define VER_FILEVERSION_STR "3.10.349.0\0"
...
VALUE "FileVersion", VER_FILEVERSION_STR

Также важно отметить, что в среде Delphi можно использовать фигурные скобки для обозначения блоков вместо ключевых слов, что может упростить чтение и написание ресурсов версии.

FILETYPE 0x1 {
  BLOCK "StringFileInfo" {
    BLOCK "00000000" {
      VALUE "FileDescription", "Great product, much value!\000"
      VALUE "FileVersion", "1.0.39\000"
    }
  }
  BLOCK "VarFileInfo" {
    VALUE "Translation", 0x0000 0x0000
  }
}

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

Подтвержденный ответ и вывод

Использование нулевого терминатора (\0) в конце каждой строки данных в ресурсе версии является обязательным. Это позволяет корректно интерпретировать строки в бинарном формате и предотвращает искажение данных при просмотре метаданных EXE файла в Проводнике Windows.

Заключение

Разработчикам, работающим с метаданными EXE файлов в Delphi, важно помнить о правилах форматирования строк в ресурсах версии. Добавление нулевого терминатора в конец каждой строки данных является ключевым моментом для предотвращения искажения текста. Следуя этим рекомендациям, можно избежать распространенных ошибок и обеспечить корректное отображение информации о программе в системе.

Создано по материалам из источника по ссылке.

Проблема описана в статье связана с искажением данных метаданных EXE файлов при использовании внешнего файла `verinfo.rc` в среде разработки Delphi, из-за чего в Проводнике Windows отображаются неправильные символы вместо ожидаемого текста, что может быт


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:33:44/0.0021681785583496/0