2012-03-18 8 views
21

Sto cercando di capire automaticamente quale versione di Delphi (da Delphi 5 a XE2 installata sul mio computer) utilizzare per aprire un determinato progetto senza aggiornare quel progetto per errore.Come determinare la versione di Delphi che ha creato un progetto Delphi

Fino a Delphi 7 è presente un file .dof in formato .ini per ogni progetto. Delphi 5 non ha una voce che potrebbe aiutare, ma a partire da Delphi 6 è presente una sezione [FileVersion] che contiene i seguenti valori:

  • Delphi 5: n/a
  • Delphi 6: 6.0
  • Delphi 7: 7,0

quindi credo che si deposita che, dal momento che le vecchie versioni di Delphi non mi riguardano.

per Delphi 2005 e il 2006 v'è un file in formato XML .bdsproj contenente una voce di versione: \ BorlandProject \ PersonalityInfo \ Option \ Opzione

In Delphi 2005 Sembra che questo:

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

In Delphi 2006 in questo modo:

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

Quindi posso controllare se esiste l'attributo "Tipo" e in base a quello decidere su Delphi 2005 o 2006. Qualcuno potrebbe dare un'occhiata ai suoi progetti Delphi 2005 e 2006 e verificare questa differenza? (O forse hai un'idea migliore?)

modifica: Ho appena provato a verificare questo e ho scoperto che Delphi 2005 non aggiunge sempre l'attributo di tipo. Quindi ora sono bloccato.

modifica: Forse il GUID memorizzato è unico per la versione Delphi?

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

In qualche modo ne dubito, io sono paura che il GUID possa rappresentare SKU diversi (Professional/Architetto ecc.). Ma forse potresti verificarlo?

A partire da Delphi 2007 è disponibile un file .dproj in un formato XML diverso. Il formato di Delphi 2007 non contiene alcuna voce di versione che ho trovato, ma da Delphi 2009 sulla non sembra essere la seguente voce:

\project\PropertyGroup\ProjectVersion

Questi sono i valori che ho trovato nel mio file .dproj:

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

Se questi sono corretti, ho potuto determinare in modo affidabile Delphi 2007, XE e XE2. Ma come faccio a distinguere tra Delphi 2009 e il 2010?

Inoltre, questi numeri mi sembrano strani. Qualcuno sa se ci sono differenze tra i vari aggiornamenti di Delphi, ad es. la versione originale di Delphi XE2 potrebbe iniziare con 13.0 e con ogni aggiornamento incrementare il numero dopo il punto? Ma se è così, in che modo Delphi XE ha ottenuto 12.3?

(c'è una domanda simile How can I tell what version of Delphi was used to create a project ma la risposta singola non è abbastanza limitato.)

Nel caso in cui nessun altro ha bisogno di questo: ho appena aggiunto una page to the Delphi Wiki che riassume tutte le risposte e aggiunge le informazioni per le versioni più recenti di Delphi (attualmente fino a Delphi 10.1).

+0

Perché avete bisogno di questo? Sicuramente sai con quale versione di Delphi sono costruiti i tuoi progetti. –

+0

@DavidHeffernan vedere la mia risposta qui sotto. – dummzeuch

+0

Suggerirei di seguire una semplice convenzione di denominazione per identificare chiaramente la versione delphi di destinazione per un particolare file di progetto. Per esempio. Inseriamo i nostri file di progetto in una sottocartella. Quindi il nome della cartella indica la versione di Delphi da utilizzare. –

risposta

5

I numeri di versione nei file * PROJ non sono associati a rilasci o aggiornamenti e non tutte le versioni raggiungono le strade.

  • Delphi XE RTM usato versione 12.2
  • Delphi XE Update # 1 utilizza la versione 12.3
  • Delphi XE2 (RTM fino Aggiornamento # 4) utilizza 13,4
10

Ora ho confrontato il File .bdsproj di Delphi 2005 e 2006 e non vi è alcuna differenza. Inoltre, non v'è alcuna differenza tra i file .dproj creati da Delphi 2009 e 2010.

Quindi la risposta è:

  • se esiste un file .dproj -> leggere \ progetto \ PropertyGroup \ ProjectVersion
    • vuoto -> Delphi 2007
    • 12.0 -> Delphi 2009 o 2010
    • 12.2 o 12.3 -> Delphi XE1 (secondo Uwe Schuster)
    • 13.4 -> Delphi XE2
  • se esiste un file .bdsproj -> Delphi 2005 o nel 2006
  • se esiste un file .dof -> leggere [FileVersion] \ versione
    • vuoto -> Delphi 5 (o forse più vecchio)
    • 6.0 -> Delphi 6
    • 7.0 -> Delphi 7

Purtroppo questo non mi permette di scrivere un programma che avvia automaticamente la versione Delphi corretta per un determinato progetto.

Forse lascerò che il programma chieda all'utente se ci sono due possibilità e memorizza la sua risposta in un file .ini così la prossima volta che il programma saprà quale versione di Delphi iniziare.

btw: La ragione per cui stavo osservando questo è che ho più volte accidentalmente aperto progetti Delphi 2007 con una versione successiva di Delphi che l'ho aggiornata e ho dovuto invertire queste modifiche a mano. Questo è diventato così fastidioso che volevo impedirlo registrando il mio programma come gestore per i file .dpr.

+2

Se si stanno invertendo le modifiche manualmente, è necessario utilizzare il controllo di revisione –

+1

@DavidHeffernan: Con "mano" intendevo fare clic sui file e selezionare Ripristina in TortoiseSVN. Questo non è così difficile come in realtà la modifica dei file, ma ancora fastidioso. A proposito: ora ho risolto il problema aggiungendo un file batch al progetto che lo apre nell'ide corretto. – dummzeuch

+0

Il percorso di ricerca dell'unità può fornire un suggerimento su quale versione del compilatore è stato collegato al progetto. – bvj

4

Appena installato XE3 (RTM). 14.3 XE3 (C++ & Delphi)

+1

14.4: XE4 e 15.1: XE5 –

+0

15.3: XE5 (aggiornamento 2); e 16.0: XE7 – Martijn

3

Oggi trovo questo argomento googlin sull'edizione Delphi (Standard, Professional, Enterprise).

Comunque ho controllato alcuni file .dof diffuse in macchina mia e c'è fatti relativi ad antiche versioni di Delphi:

se un file esiste .dof -> leggi [Directories]/Pacchetti

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; 

Ulteriori informazioni possono essere scovato nei pressi fine del file 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 
Problemi correlati