2012-03-18 31 views
21

Estoy tratando de averiguar automáticamente qué versión de Delphi (de Delphi 5 a XE2 instalada en mi computadora) usar para abrir un proyecto determinado sin actualizar ese proyecto por error.Cómo determino la versión de Delphi que creó un proyecto de Delphi

Hasta Delphi 7 hay un archivo .dof en formato .ini para cada proyecto. Delphi 5 no tiene ninguna entrada que podría ayudar, pero a partir de Delphi 6 hay una sección [FileVersion], que contiene los siguientes valores:

  • Delphi 5: N/A
  • Delphi 6: 6,0
  • Delphi 7: 7,0

Así que supongo que se asienta que, dado que las versiones anteriores de Delphi no me preocupan.

Para Delphi 2005 y 2006 hay un archivo .bdsproj en formato XML que contiene una entrada de versión: \ BorlandProject \ PersonalityInfo \ opción \ Opción

En Delphi 2005 se parece a esto:

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

En Delphi 2006 así:

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

Entonces podría ver si existe el atributo "Tipo" y dependiendo de eso decidir sobre Delphi 2005 o 2006. ¿Podría alguien echar un vistazo a sus proyectos Delphi 2005 y 2006 y verificar esta diferencia? (¿O tal vez tiene una mejor idea?)

edit: Intenté verificar esto y encontré que Delphi 2005 no siempre agrega el Tipo-Atributo. Así que ahora estoy atascado.

editar: Tal vez el GUID almacenado allí es exclusivo de la versión Delphi?

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

De alguna manera lo dudo, estoy temeroso de que el GUID pueda representar diferentes SKU (Profesional/Arquitecto, etc.). Pero tal vez podrías verificar esto?

Comenzando con Delphi 2007 hay un archivo .dproj en un formato XML diferente. El formato Delphi 2007 no contiene ninguna entrada versión que pude encontrar, pero a partir de 2009, sobre Delphi no parece ser la siguiente entrada:

\project\PropertyGroup\ProjectVersion

Estos son los valores que encontré en mis archivos .dproj:

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

Si éstas son correctas, podría determinar de forma fiable Delphi 2007, XE y XE2. ¿Pero cómo distingo entre Delphi 2009 y 2010?

Además, estos números me parecen extraños. ¿Alguien sabe si existen diferencias entre las diversas actualizaciones de Delphi, p. ¿La versión original de Delphi XE2 podría comenzar con 13.0 y con cada actualización incrementar el número después del punto? Pero si ese es el caso, ¿cómo obtuvo Delphi XE 12.3?

(hay una pregunta similar How can I tell what version of Delphi was used to create a project pero la única respuesta no es bastante limitada.)

Sólo en caso de cualquier otra persona necesita esto: simplemente he añadido un page to the Delphi Wiki que resume todas las respuestas y añade información para las nuevas versiones de Delphi (actualmente hasta Delphi 10.1).

+0

¿Por qué necesita esto? Seguramente sabes con qué versión de Delphi están construidos tus proyectos. –

+0

@DavidHeffernan vea mi respuesta a continuación. – dummzeuch

+0

Sugiero seguir una convención de nomenclatura simple para identificar claramente la versión delphi de destino para un archivo de proyecto en particular. P.ej. Ponemos nuestros archivos de proyecto en una subcarpeta. Entonces, el nombre de la carpeta indica la versión de Delphi que se usará. –

Respuesta

5

Los números de versión en los archivos * PROJ no están limitados a lanzamientos o actualizaciones y no todas las versiones salen a la calle.

  • Delphi XE RTM utiliza versión 12.2
  • Delphi XE Actualización # 1 utiliza la versión 12.3
  • Delphi XE2 (RTM hasta Actualización # 4) utiliza 13,4
10

ahora he comparado la archivos .bdsproj de Delphi 2005 y 2006 y no hay diferencia. Además, no hay ninguna diferencia entre los archivos creados por .dproj Delphi 2009 y 2010.

Así que la respuesta es:

  • si existe un archivo .dproj -> leer \ proyecto \ PropertyGroup \ ProjectVersion
    • vacío -> Delphi 2007
    • 12.0 -> Delphi 2009 o 2010
    • 12.2 o 12.3 -> Delphi XE1 (según Uwe Schuster)
    • 13.4 -> Delphi XE2
  • si existe un archivo .bdsproj -> Delphi 2005 o 2006
  • si existe un archivo .dof -> Leer [FileVersion] \ versión
    • vacío -> Delphi 5 (o posiblemente más)
    • 6.0 -> Delphi 6
    • 7,0 -> Delphi 7

Desafortunadamente esto no permite que escriba un programa que inicia automáticamente la versión correcta de Delphi para un proyecto determinado.

Quizás deje que el programa pregunte al usuario si hay dos posibilidades y almacene su respuesta en un archivo .ini para que la próxima vez el programa sepa qué versión de Delphi debe iniciarse.

btw: La razón por la que estaba investigando esto es porque varias veces abrí accidentalmente proyectos Delphi 2007 con una versión posterior de Delphi que la actualizó y tuve que revertir estos cambios a mano. Esto se ha vuelto tan molesto que quise evitarlo registrando mi propio programa como manejador de archivos .dpr.

+2

Si está invirtiendo los cambios manualmente, debe usar el control de revisión –

+1

@DavidHeffernan: con "a mano" quise hacer clic en los archivos y seleccionar Revertir en TortoiseSVN. Esto no es tan difícil como editar los archivos, pero sigue siendo molesto. Por cierto: ahora he resuelto el problema agregando un archivo por lotes al proyecto que lo abre en la ide correcta. – dummzeuch

+0

La ruta de búsqueda de la unidad puede proporcionar una pista sobre a qué versión del compilador se vinculó el proyecto. – bvj

4

Acaba de instalar XE3 (RTM). 14.3 XE3 (C++ & Delphi)

+1

14.4: XE4 y 15.1: XE5 –

+0

15.3: XE5 (Actualización 2); y 16.0: XE7 – Martijn

3

Hoy encuentro este tema googlin sobre la edición Delphi (Estándar, Profesional, Empresa).

De todos modos yo nos registramos algunos archivos .dof repartidos en la máquina de la mina y hay hechos relacionados con antiguas versiones de Delphi:

si existe un archivo .dof -> Leer [directorios]/Paquetes

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; 

información adicional puede ser finded cerca de fin de archivo 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 

D5:

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