Как определить версию Delphi, которая создала проект Delphi - программирование
Подтвердить что ты не робот

Как определить версию Delphi, которая создала проект Delphi

Я пытаюсь автоматически определить, какую версию Delphi (от Delphi 5 до XE2, установленную на моем компьютере) использовать, чтобы открыть данный проект, не обновляя его по ошибке.

До Delphi 7 для каждого проекта существует файл .dof в формате .ini. В Delphi 5 нет записей, которые могли бы помочь, но начиная с Delphi 6 есть раздел [FileVersion], который содержит следующие значения:

  • Delphi 5: N/A
  • Delphi 6: 6.0
  • Delphi 7: 7.0

Так что я думаю, это решает проблему, поскольку старые версии Delphi меня не касаются.

Для Delphi 2005 и 2006 существует файл .bdsproj в формате XML, содержащий запись версии:\BorlandProject\PersonalityInfo\Option\Option

В Delphi 2005 это выглядит так:

<Option Name="Version" Type="String">1.0</Option>

В Delphi 2006 так:

<Option Name="Version">1.0</Option>

Поэтому я мог бы посмотреть, существует ли атрибут "Тип" и зависит ли это от решения Delphi 2005 или 2006. Может ли кто-нибудь взглянуть на его проекты Delphi 2005 и 2006 и проверить это различие? (Или, может быть, у вас есть идея получше?)

редактировать: я просто попытался проверить это и обнаружил, что Delphi 2005 не всегда добавляет атрибут типа. Так что теперь я застрял.

edit: Может быть, хранящийся там GUID уникален для версии Delphi?

  • Delphi 2005: {87D03616-A4C7-4B5A-AF0F-0164EA60BC59}
  • Delphi 2006: {CFE1BEE6-6FDE-4241-8CA5-D38D14EAA768}

Почему-то я сомневаюсь в этом, я боюсь, что GUID может представлять разные SKU (Professional/Architect и т.д.). Но, может быть, вы могли бы проверить это?

Начиная с Delphi 2007, существует файл .dproj в другом формате XML. Формат Delphi 2007 не содержит какой-либо записи версии, которую я мог бы найти, но начиная с Delphi 2009, кажется, есть следующая запись:

\project\PropertyGroup\ProjectVersion

Вот значения, которые я нашел в моих файлах .dproj:

  • Delphi 2007: N/A
  • Delphi 2009: 12,0
  • Delphi 2010: 12,0
  • Delphi XE: 12,3
  • Delphi XE2: 13,4

Если они верны, я могу достоверно определить Delphi 2007, XE и XE2. Но как мне отличить Delphi 2009 от 2010?

Кроме того, эти цифры выглядят странно для меня. Кто-нибудь знает, есть ли какие-либо различия между различными обновлениями Delphi, например, возможно, оригинальный выпуск Delphi XE2 начинался с 13.0, и с каждым обновлением увеличивается число после точки? Но если это так, как Delphi XE получил 12,3?

(Есть похожий вопрос. Как узнать, какая версия Delphi использовалась для создания проекта, но единственный ответ там весьма ограничен.)

На всякий случай, если кому-то еще это понадобится: я только что добавил страницу в Delphi Wiki, которая суммирует все ответы и добавляет информацию для более новых версий Delphi (в настоящее время до Delphi 10.3).

4b9b3361

Ответ 1

Номера версий в файлах * PROJ не привязаны к выпускам или обновлениям, и не все версии попадают на улицы.

  • Delphi XE RTM используется версия 12.2
  • Delphi XE Update # 1 использует версию 12.3
  • Delphi XE2 (RTM до обновления № 4) использует 13.4

Ответ 2

Теперь я сравнил файлы .bdsproj от Delphi 2005 и 2006, и нет никакой разницы. Кроме того, нет никакой разницы между файлами .dproj, созданными Delphi 2009 и 2010.

Итак, ответ:

  • если существует файл .dproj → read\project\PropertyGroup\ProjectVersion
    • empty → Delphi 2007
    • 12.0 → Delphi 2009 или 2010
    • 12.2 или 12.3 → Delphi XE1 (согласно Uwe Schuster)
    • 13.4 → Delphi XE2
  • если существует файл .bdsproj → Delphi 2005 или 2006
  • если существует файл .dof → прочитать [FileVersion]\версия
    • empty → Delphi 5 (или, возможно, старше)
    • 6.0 → Delphi 6
    • 7.0 → Delphi 7

К сожалению, это не позволяет мне написать программу, которая автоматически запускает правильную версию Delphi для данного проекта.

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

btw: Причина, по которой я рассматривал это, заключается в том, что я несколько раз случайно открыл проекты Delphi 2007 с более поздней версией Delphi, которая обновила ее, и мне пришлось вручную отменить эти изменения. Это стало настолько раздражающим, что я хотел предотвратить его, зарегистрировав мою собственную программу в качестве обработчика файлов .dpr.

Ответ 3

Только что установлен XE3 (окончательная первоначальная версия). 14.3 XE3 (С++ и Delphi)

Ответ 4

Сегодня я нахожу эту тему googlin о выпуске Delphi (Standard, Professional, Enterprise).

В любом случае я проверил некоторые .dof файлы, распространенные в моей машине, и есть факты, связанные с древними версиями delphi:

если существует файл .dof → прочитать [Каталоги]/Пакеты

Delphi 3

[Directories]
OutputDir=
UnitOutputDir=
SearchPath=
Packages=VCLX30;VCL30;INETDB30;INET30;

Delphi 5

[Directories]
OutputDir=.
UnitOutputDir=.
PackageDLLOutputDir=.
PackageDCPOutputDir=.
SearchPath=
Packages=Vcl50;Inet50;Inetdb50;Vclx50;Indy50;

Дополнительная информация может быть найдена около конца файла dof:

D3:

[Excluded Packages]
C:\Program Files\Borland\Delphi 3\Bin\DCLDSS30.dpl=Delphi Decision Cube Components
C:\PROGRAM FILES\BORLAND\DELPHI 3\BIN\DCLTEE30.DPL=Delphi TeeChart Components

Д5:

[Excluded Packages]
$(DELPHI)\Bin\CorIde50.bpl=Borland Core IDE Package
$(DELPHI)\Bin\direct50.bpl=Borland Direct IDE Package