![]() |
Mit version und Buildnummer arbeiten
Hi,
ich habe möchte gerne innerhalb des programms die daten der Versionskontrolle auslesen. Und zwar wollte ich das so ausgeben. Version 1.1.0 {build 4444} wobei 4444 die compilierungsnummer ist. Die zählt er ja beim erstellen selber hoch. Nun zur frage, kann ich das innerhalb des programms abrufen ob muss man wirklich den umweg über die .exe nehmen?? Alles was ich gefunden habe (bestimmt wieder falsch gesucht) geht diesen umweg. Danke im voraus |
Re: Mit version und Buildnummer arbeiten
Meinst du sowas?
Damit kannst du dir die Versionsinformationen aus der Datei holen, die du mit fileName übergibst.
Delphi-Quellcode:
type tFileVersionRec = record Fixed : TVSFixedFileInfo;
hauptversion, nebenversion, Ausgabe , Compilierung:word; BetaVersion : boolean; end; function GetVersionInfo (filename : shortstring;var fw : tFileVersionRec ) : boolean; var dw,size,len : longword; p : par64; s : string[10]; p2 : pointer; ok : boolean; begin result:=false; filename:=filename+#0; dw:=1; size:=GetFileVersionInfoSize(@filename[1],dw); if (size=0) or (dw<>0) then exit; getmem(p,size); ok:=GetFileVersionInfo(@filename[1],dw,size,p); if ok then begin s:='\'+#0; ok:=VerQueryValue(p,@s[1],p2,len); move(p2^,fw.fixed,maximum(len,sizeof(fw.fixed))); fw.hauptversion:=hiword(fw.fixed.dwFileVersionMS); fw.nebenversion:=loword(fw.fixed.dwFileVersionMS); fw.Ausgabe :=hiword(fw.fixed.dwFileVersionLS); fw.Compilierung:=loword(fw.fixed.dwFileVersionLS); fw.betaversion :=(fw.fixed.dwfileflags and $2)>0; end; freemem(p); result:=ok; end; |
Re: Mit version und Buildnummer arbeiten
|
Re: Mit version und Buildnummer arbeiten
Ja sowas in der art. Aber halt OHNE diesen "umweg" über das exe-file. Ich will ja kein anderes prg abfragen sondern nur den kram von meinem prg wissen. Ich dachte das kann man "intern" ermitteln.
|
Re: Mit version und Buildnummer arbeiten
Wenn du das von deinem programm abfragen willst, nehm doch
Delphi-Quellcode:
var fw : tFileVersionRec;
begin GetFileVersion(Application.Exename,fw); end; |
Re: Mit version und Buildnummer arbeiten
Zitat:
|
Re: Mit version und Buildnummer arbeiten
Ich dachte es gibt einen Record oder was weiss ich, der gesetzt ist. Aber den antworten und meinen google ergebnissen entnehme ich das es sowas wohl nicht gibt. Schade.
Da dem wohl nicht so ist, also es keinen interne variable/record oder so gibt, nehme ich dankend die routine von daywalker9. :thumb: |
Re: Mit version und Buildnummer arbeiten
Klar gibt es den Record, denn irgendwo müssen die Daten ja gespeichert sein. Dieser Record steht in den Ressourcen der Exe und diese sind natürlich einkompiliert:
Code:
Oder wo sollte dieser Record deiner Meinung nach stehen?
IDR_VERSION VERSIONINFO
FILEVERSION 1, 0, 0, 15 PRODUCTVERSION 1,0,0,0 FILEOS 0x00000004 FILETYPE 0x00000001 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "04090000" BEGIN VALUE "FileVersion", "1, 0, 0, 15\0" VALUE "FileDescription", "nonVCL Dialog Template\0" VALUE "LegalCopyright", "Michael Puff\0" VALUE "ProductName", "Dialog Template\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 0x0000 END END |
Re: Mit version und Buildnummer arbeiten
Ich glaube wir reden aneinander vorbei. Mir ist auch klar das der kram in der exe stehen muss. Nu weiss ich garnicht wie ich mich ausdrücken soll....
BEISPIEL!!!!!!!! Versionsnummer:=RecordWasWeissIch.Version; SubVersion:=RecordWasWeissIch.SubVersion; Ich dachte sowas gibt es. |
Re: Mit version und Buildnummer arbeiten
Erst nach dem Linken, deshalb muss dies auch aus der Exe gelesen werden!
|
Re: Mit version und Buildnummer arbeiten
Zitat:
Dem ist nicht so, denn die Versioninformation ist eine Resource. Resourcen werden nur geladen, wenn das Programm sie explizit anfordert. Man könnte nun die Resource mit der ![]() Aber ich denke, das lohnt den Aufwand nicht. |
Re: Mit version und Buildnummer arbeiten
Genau das hat dir daywalker doch gegeben:
Delphi-Quellcode:
type tFileVersionRec = record Fixed : TVSFixedFileInfo;
hauptversion, nebenversion, Ausgabe , Compilierung:word; BetaVersion : boolean; end; |
Re: Mit version und Buildnummer arbeiten
Eigentlich hätte mir als antwort
"nein, geht nicht. du musst den umweg nehmen" voll und ganz gereicht. Trotzdem vielen dank euch allen |
Re: Mit version und Buildnummer arbeiten
Zitat:
|
Re: Mit version und Buildnummer arbeiten
Zitat:
|
Re: Mit version und Buildnummer arbeiten
Jetzt verstehe ich dich. Du dachstest man müsste das nicht selber auslesen, sondern die VCL oder Windows-API würde dir das schon als Konstante oder Variable zur Verfügung stellen. Nein, dem ist nicht so. Du musst die Werte schon selber aus der Ressource auslesen, wie es daywalker vorgemacht hat.
|
Re: Mit version und Buildnummer arbeiten
Uff, danke Luckie. Ich dachte schon ich rede eine andere sprache.
Mal was wirklich witziges. Ich bekomme das nicht übersetzt wegen dem par64. Naja dachte ich, willst ja nicht schon wieder fragen.... also "delphi par64" in google rein. Der erste treffer war dieser Thread hier. *muuuuhahaha* Also... muss ich trotzdem fragen wer oder was par64 ist.... |
Re: Mit version und Buildnummer arbeiten
Achso, hatte ich vergessen:
Delphi-Quellcode:
type pAr64 = ^tAr64;
tAr64 = array [0..MaxLongInt-1] of byte; |
Re: Mit version und Buildnummer arbeiten
Nun scheiter ich schon an nem dreizeiler. Ich glaube heut ist nicht mein tag ;)
Was ist denn maximum??? bzw. in welcher unit ist das drinne? Ich kenne nur max. |
Re: Mit version und Buildnummer arbeiten
Benutzte max. Ich habe viele eigene funktionen, typen die ich so benutzte. wie z.b maximum und pAr64
|
Re: Mit version und Buildnummer arbeiten
Achso, ok. Danke dir....
|
AW: Mit version und Buildnummer arbeiten
Ich habe
![]() Vielleicht kann das ja jemand gebrauchen.
Delphi-Quellcode:
und hier der Aufruf davon
if VerInfoSize > 0 then
begin GetMem(VerInfo, VerInfoSize); try if GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo) then begin VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); with VerValue^ do begin V1 := dwFileVersionMS shr 16; V2 := dwFileVersionMS and $FFFF; V3 := dwFileVersionLS shr 16; V4 := dwFileVersionLS and $FFFF; end; end; finally FreeMem(VerInfo, VerInfoSize); end; end; end; function GetBuildInfoAsString: string; var V1, V2, V3, V4: word; begin GetBuildInfo(V1, V2, V3, V4); Result := IntToStr(V1) + '.' + IntToStr(V2) + '.' + IntToStr(V3) + '.' + IntToStr(V4); end;
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Form1.Caption := Form1.Caption + ' - v' + GetBuildInfoAsString; end; |
AW: Mit version und Buildnummer arbeiten
Ich hatte mir das auch mal in einer Art Klasse verpackt.
![]() Da werden auch noch solche Dinge, wie z.B. das Debug-Flag ausgewetet, denn man kann auch eine Version direkt als Testversion markieren. Müsste mal schauen wie aktuell diese Version der Version ist, aber ich glaub daran ha sich nichts verändert ... Aktuellstes siehe Helper-Unit im ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz