sirve - partes del programa delphi
¿Cómo determino la versión de Delphi que creó un proyecto de Delphi? (4)
Estoy tratando de averiguar automáticamente qué versión de Delphi (de Delphi 5 a XE2 instalado en mi computadora) usar para abrir un proyecto determinado sin actualizar ese proyecto por error.
Hasta Delphi 7 hay un archivo .dof en formato .ini para cada proyecto. Delphi 5 no tiene ninguna entrada que pueda 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
- Delfos 7: 7.0
Así que supongo que eso resuelve, ya que las versiones anteriores de Delphi no me conciernen.
Para Delphi 2005 y 2006 hay un archivo .bdsproj en formato XML que contiene una entrada de versión: / BorlandProject / PersonalityInfo / Option / Option
En Delphi 2005 se ve así:
<Option Name="Version" Type="String">1.0</Option>
En Delphi 2006, así:
<Option Name="Version">1.0</Option>
Así que podría ver si existe el atributo "Tipo" y dependiendo de eso decidir sobre Delphi 2005 o 2006. ¿Alguien podría echar un vistazo a sus proyectos Delphi 2005 y 2006 y verificar esta diferencia? (¿O tal vez tienes una mejor idea?)
editar: 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, me temo que el GUID puede 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 de versión que pueda encontrar, pero de Delphi 2009 aparece 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 estos son correctos, podría determinar confiablemente 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, por ejemplo, la versión original de Delphi XE2 puede 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. ¿ Cómo puedo saber qué versión de Delphi se utilizó para crear un proyecto, pero la única respuesta es bastante limitada).
Solo en caso de que alguien más lo necesite: acabo de agregar una página a Delphi Wiki que resume todas las respuestas y agrega información para las versiones más recientes de Delphi (actualmente hasta Delphi 10.1).
Acabo de instalar XE3 (RTM). 14.3 XE3 (C ++ y Delphi)
Ahora comparé los archivos .bdsproj de Delphi 2005 y 2006 y no hay diferencia. Además, no hay diferencia entre los archivos .dproj creados por Delphi 2009 y 2010.
Entonces 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] / version
- vacío -> Delphi 5 (o posiblemente más antiguo)
- 6.0 -> Delphi 6
- 7.0 -> Delphi 7
Lamentablemente, esto no me permite escribir 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 iniciar.
Por cierto, la razón por la que estaba investigando esto es porque varias veces abrí accidentalmente proyectos de 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.
Hoy encuentro este tema googlin sobre la edición Delphi (Standard, Professional, Enterprise).
De todos modos, revisé algunos archivos .dof extendidos en la máquina de la mina y hay hechos relacionados con versiones delphi antiguas:
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;
Se puede encontrar información adicional cerca del final del 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
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 utilizó la versión 12.2
- La actualización n.º 1 de Delphi XE usa la versión 12.3
- Delphi XE2 (RTM hasta Update # 4) usa 13.4