Как использовать информацию о версии проекта в приложении Delphi?

Я использую Параметры проекта / Версия для управления информацией о версии (формат NNNN).

Во всяком случае, внутри моего проекта я дублирую эту информацию.

Поэтому, если в опциях проекта я работаю над выпуском 2.4.3.178 внутри моего приложения, у меня есть 4 целочисленные переменные, которые содержат 4 числа.

Я их вручную установил

Major := 2;
Minor := 4;
Release := 3;
Build := 178;

Причина этого проста: у меня лицензирование на основе номера версии. Поэтому, если пользователь покупает выпуск "2.4", ему не разрешено обновляться до версии "3.0".

Но если я полагаюсь на информацию о версии проекта, пользователь может (с помощью инструментов Resource Hacker) изменить информацию о версии и, следовательно, "активировать" продукт.

Пользователь не может изменить 4 переменные таким же образом (по крайней мере, не так легко).

Это работает, но заставляет меня дублировать информацию.

Не могли бы вы предложить лучший подход?

Иначе сказал бы: есть ли способ записать информацию о версии, используя данные, которые я записываю в эти 4 переменные. Что-то похожее на события Post Build, но как передать данные в события Post Build?

3 ответа

Вам нужно событие перед сборкой, а не событие после сборки, так как вы хотите создать файл.res перед установкой ссылки.

Я делаю нечто очень похожее с простым сценарием Perl, который читает включаемый файл (.inc), содержащий постоянные объявления номеров версий. Я читаю их с помощью регулярных выражений, а затем создаю свой файл.rc, который я передаю в brcc32. Все это вызывается как действие перед сборкой.

Поскольку вы работаете в Delphi-XE и у вас есть Final Builder, почему бы вам не использовать его на должном уровне и не сделать свою "окончательную" сборку? Это может дать очень хорошее решение проблемы номера версии, и может сделать намного больше.

Вот как я это сделаю.

  • Установите небольшой INI-файл, который содержит соответствующие части информации о версии.
  • При желании можно создать небольшое приложение для создания форм Delphi, которое считывает номер версии из файлов INI и дает вам возможность изменить его. Когда изменения сохраняются в INI-файле, приложение delphi должно автоматически создать небольшой PAS-файл Delphi, который определяет константы!
  • Создайте проект FinalBuilder, который выполняет следующее:
    • Вызывает ваш Delphi exe для установки номера версии. Вы будете отвечать за изменение того, что нужно изменить, и это, вероятно, уместно, поскольку ваша схема лицензирования зависит от информации о версии.
    • Установите несколько переменных проекта для хранения номеров информации о версии
    • Добавьте действия "Чтение INI-файла" для чтения информации о версии из INI-файлов в переменные вашего проекта.
    • (необязательно) Создайте проект модульного теста, если он у вас есть.
    • (необязательно) Позвоните в проект модульного тестирования.
    • Добавьте действие "build Delphi project", настройте его для построения своего проекта, используя любые опции, которые вам нужны. Добавьте небольшой скрипт "До", чтобы установить номера информации о версии для того, что вы получили в переменных проекта, которые вы только что прочитали из INI-файла.
    • (необязательно) создавать установочные пакеты, используя любой инструмент, который вы используете.
    • (необязательно) загрузите эти установочные пакеты на веб-сайт.

Другими словами, воспользуйтесь возможностью начать использовать Final Builder.

Перемещение номеров версий в код также легко обойти.

Один из способов передачи информации - программно сгенерировать файл version.rc (вы сами пишете крошечный инструмент для сборки, используя delphi или язык сценариев по вашему выбору) и связываете ресурсы с программой вместо использования встроенной версии - информационная особенность.

Ваш вопрос, по-видимому, в основном состоит в том, чтобы помешать пользователю (легко) изменить номер версии, как только вы ее определили.

Поэтому я предлагаю вам зашифровать номер версии и использовать зашифрованную версию вместо версии в структуре VersionInfo.

Я использовал DCPCRYPT для таких вещей. Но если вы надеетесь быть защищенным от хакеров, позвольте мне сказать это; Все, что вы можете сделать, хакеры могут отменить. Если вы хотите быть более безопасным, вам также нужно будет проверить все ваше приложение. Существуют коммерческие решения для защиты от взлома, но ни одно из них не работает из коробки с Delphi.

Другие вопросы по тегам