Entwickler-Ecke
Sonstiges (Delphi) - Versionsnummer automatisch erhöhen
mwsnet - Sa 19.10.02 18:31
Titel: Versionsnummer automatisch erhöhen
Hallo,
sagt mal, ich würde gerne automatisch nach jedem Compilieren meines Progs die DateiVersion um einen Zähler erhöhen. Also z.B. von 1.0.0.55 auf 1.0.0.56.
Ich arbeite mit Delphi7 Pro und dort gibt es ja eine entsprechende Möglichkeit bei Projekt -> Optionen -> Versionsinfo. Doch wenn ich den entsprechenden Haken setze passiert bei mir gar nichts. Was muss man denn da noch beachten?
Danke.
Grüsse
Michael
Henry - Sa 19.10.02 18:37
Also ich verwende Delphi5 Pro.
Da ist es so, das die Versionsnummer nur erhöht wird wenn
ich das Projekt über
Projekt --> Project1 Compilieren
oder
Projekt --> Project1 erzeugen
Compiliere.
Vieleicht hilft Dir das ja bei D7 auch weiter
mwsnet - Sa 19.10.02 18:58
Titel: Geht
Hi Henry,
jo danke für den Tip. Mit Projekt erzeugen klappt es auch. Das habe ich bisher kaum benutzt, da mein 2 Jahre alter PC dann immer ca. 'ne Minute rumrödelt :roll:
Cu Michael
Henry - Sa 19.10.02 20:45
Das stimmt wohl, das das ne weile dauert.
Aber ich habe noch keine Einstellung gefunden wo es mit F9 auch geht :(
Freut mich aber wenn es geholfen hat
enigma - Mo 21.10.02 10:49
ist es auch möglich die dateiversion auszulesen und dann in der about box anzuzeigen??
Delete - Mo 21.10.02 11:31
Ja.
Marduk - Mo 21.10.02 11:44
Hier haste den Code aus der Delphi Hilfe:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.Button1Click(Sender: TObject);
const InfoNum = 10; InfoStr: array[1..InfoNum] of string = ('CompanyName', 'FileDescription', 'FileVersion', 'InternalName', 'LegalCopyright', 'LegalTradeMarks', 'OriginalFileName', 'ProductName', 'ProductVersion', 'Comments'); var S: string; n, Len, i: DWORD; Buf: PChar; Value: PChar; begin S := Application.ExeName; n := GetFileVersionInfoSize(PChar(S), n); if n > 0 then begin
Buf := AllocMem(n); Memo1.Lines.Add('VersionInfoSize = ' + IntToStr(n)); GetFileVersionInfo(PChar(S), 0, n, Buf); for i := 1 to InfoNum do if VerQueryValue(Buf, PChar('StringFileInfo\040904E4\' + InfoStr[i], Pointer(Value), Len) then Memo1.Lines.Add(InfoStr[i] + ' = ' + Value); FreeMem(Buf, n); end else Memo1.Lines.Add('No version information found'); end; |
Gruß Dennis
Delete - Mo 21.10.02 12:26
Unter welchen Stichwort findet man denn das in der Delphi-Hilfe? :shock:
Und irgendwie haut das ganze auch noch nicht so hin. :?
Marduk - Di 22.10.02 08:56
Okay ich bin ehrlich :oops: , habs selber gar nich getestet.
Gefunden hab ich das ganze mit dem stichwort "versionnumber, setting".
Die Beschreibung hat meiner meinung nach zu dem Problem gepasst:
Quelltext
1:
| You can use the Windows GetFileVersionInfo and VerQueryValue API functions to obtain version information that is compiled with your application. The following code illustrates how to do this by writing the version information to a memo control named Memo1: |
Also war ich überzeugt das richtige zu tun :?
Wenns nich funzt so tuts mir leid :(
Gruß Dennis
LCS - Di 22.10.02 09:05
Hi
Na gut, hier ist meine Variante.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67:
| TTrans = record b1 : byte; b2 : byte; b3 : byte; b4 : byte; end;
PTrans = ^TTrans;
procedure GetVersionInfos(var Info: TStringList); var StringBuffer : PChar; VersionPointer : PChar; Size : DWord; VersionValueLength : DWord; sCountryCode : string; begin Info.Clear; Size := GetFileVersionInfoSize(PChar(Application.Exename), Size);
if Size > 0 then begin StringBuffer := AllocMem(Size); GetFileVersionInfo(PChar(Application.Exename), 0, Size, StringBuffer);
VerQueryValue(StringBuffer, PChar('\VarFileInfo\Translation'), Pointer(VersionPointer), VersionValueLength);
sCountryCode := IntToHex(PTrans(VersionPointer)^.b2, 2) + IntToHex(PTrans(VersionPointer)^.b1, 2) + IntToHex(PTrans(VersionPointer)^.b4, 2) + IntToHex(PTrans(VersionPointer)^.b3, 2); Info.Values['CountrCode'] := sCountryCode;
if VerQueryValue(StringBuffer, PChar('\StringFileInfo\' + sCountryCode + '\' + 'CompanyName'), Pointer(VersionPointer), VersionValueLength) then Info.Values['CompanyName'] := StrPas(VersionPointer);
if VerQueryValue(StringBuffer, PChar('\StringFileInfo\' + sCountryCode + '\' + 'FileDescription'), Pointer(VersionPointer), VersionValueLength) then Info.Values['FileDescription'] := StrPas(VersionPointer); if VerQueryValue(StringBuffer, PChar('\StringFileInfo\' + sCountryCode + '\' + 'FileVersion'), Pointer(VersionPointer), VersionValueLength) then Info.Values['FileVersion'] := StrPas(VersionPointer); if VerQueryValue(StringBuffer, PChar('\StringFileInfo\' + sCountryCode + '\' + 'InternalName'), Pointer(VersionPointer), VersionValueLength) then Info.Values['InternalName'] := StrPas(VersionPointer); if VerQueryValue(StringBuffer, PChar('\StringFileInfo\' + sCountryCode + '\' + 'LegalCopyright'), Pointer(VersionPointer), VersionValueLength) then Info.Values['LegalCopyright'] := StrPas(VersionPointer); if VerQueryValue(StringBuffer, PChar('\StringFileInfo\' + sCountryCode + '\' + 'LegalTradeMarks'), Pointer(VersionPointer), VersionValueLength) then Info.Values['LegalTradeMarks'] := StrPas(VersionPointer); if VerQueryValue(StringBuffer, PChar('\StringFileInfo\' + sCountryCode + '\' + 'OriginalFilename'), Pointer(VersionPointer), VersionValueLength) then Info.Values['OriginalFilename'] := StrPas(VersionPointer); if VerQueryValue(StringBuffer, PChar('\StringFileInfo\' + sCountryCode + '\' + 'ProductName'), Pointer(VersionPointer), VersionValueLength) then Info.Values['ProductName'] := StrPas(VersionPointer); if VerQueryValue(StringBuffer, PChar('\StringFileInfo\' + sCountryCode + '\' + 'ProductVersion'), Pointer(VersionPointer), VersionValueLength) then Info.Values['ProductVersion'] := StrPas(VersionPointer); if VerQueryValue(StringBuffer, PChar('\StringFileInfo\' + sCountryCode + '\' + 'Comments'), Pointer(VersionPointer), VersionValueLength) then Info.Values['Comments'] := StrPas(VersionPointer);
FreeMem(StringBuffer, Size); end; end; |
Sieht ziemlich hässlich aus, funzt aber.
Gruss Lothar
Delete - Di 22.10.02 10:03
Noch eine Variante (auf die Versionsnummer beschränkt!) aus der Delphi-Praxis:
http://www.delphipraxis.net/viewtopic.php?t=604
Meine Variante (s. Seite 2) basiert auf Luckies Variante, und der hat sie von ... keine Ahnung, vielleicht selbstgeschrieben, vielleicht von jemandem übernommen?
Luckie? :?
Delete - Di 22.10.02 11:03
@Mathias: Lies mal das Posting von dem Typen der nach dir gepostet hat in dem DP-Thread.... :wink:
CenBells - Di 22.10.02 11:50
Ich will auch, ich will auch
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| //------------------------------------------------------------------------------ function getApplicationVersion(const AApplicationTitle: String): String; var aFileName: array [0..MAX_PATH] of Char; pdwHandle: DWORD; nInfoSize: DWORD; pFileInfo: Pointer; pFixFInfo: PVSFixedFileInfo; nFixFInfo: DWORD; begin result := ''; GetModuleFileName(0, aFileName, MAX_PATH); pdwHandle := 0; nInfoSize := GetFileVersionInfoSize(aFileName, pdwHandle); if nInfoSize <> 0 then pFileInfo := GetMemory(nInfoSize) else pFileInfo := nil; if Assigned(pFileInfo) then try if GetFileVersionInfo(aFileName, pdwHandle, nInfoSize, pFileInfo) then begin pFixFInfo := nil; nFixFInfo := 0; if VerQueryValue(pFileInfo, '\', Pointer(pFixFInfo), nFixFInfo) then begin result := Format(AApplicationTitle + ' ver. %d.%d.%d.%d', [HiWord(pFixFInfo^.dwFileVersionMS), LoWord(pFixFInfo^.dwFileVersionMS), HiWord(pFixFInfo^.dwFileVersionLS), LoWord(pFixFInfo^.dwFileVersionLS)]); end; end; finally FreeMemory(pFileInfo); end; end; |
Meine Variante. Du übergibst den Titel deiner Anwendung und erhältst einen string wie z.b.
MeineAnwendung ver. 1.0.0.56
Gruß
Ken
Maggi - Di 22.10.02 11:51
Titel: Wie wäre es damit....
Hi,
ich gebe auch mal meine Version zu Besten:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| const VerInfoNames : array[0..9] of ShortString = ('CompanyName','FileDescription', 'FileVersion','InternalName','LegalCopyright', 'LegalTradeMarks','OriginalFilename','ProductName', 'ProductVersion','Comments');
procedure TfrmInfo.FormCreate(Sender: TObject); begin lbProgVersion.Caption := GetEinVersionInfo(Application.ExeName,2); lbProgExeName.Caption := GetEinVersionInfo(Application.ExeName,6); lbProgName.Caption := GetEinVersionInfo(Application.ExeName,3); lbProgBezeichnung.Caption := GetEinVersionInfo(Application.ExeName,1); end;
function GetVersionInfo(FileName, InfoName: String): String; const //EngBrit = '080904E4'; //EngAm = '040904E4'; //EngCand = '100904E4'; Deutsch = '040704E4'; var Len,BufSize : LongWord; Buf: PChar; Info : PChar;
begin Result := ''; BufSize := GetFileVersionInfoSize(PChar(FileName),BufSize); if BufSize > 0 then begin Buf := AllocMem(BufSize); GetFileVersionInfo(PChar(FileName), 0, BufSize, Buf); if VerQueryValue(Buf,PChar('\\StringFileInfo\\'+Deutsch+'\\'+InfoName),Pointer(Info),Len) then begin if Length(Info) > 0 then Result := Info; end; FreeMem(Buf, BufSize); end; end;
function GetEinVersionInfo(FileName: String; Index: Integer): String; var InfoName : String;
begin Result := ''; InfoName := VerInfoNames[Index]; Result := GetVersionInfo(FileName, InfoName); end; |
Bis denne
Maggi
Delete - Di 22.10.02 11:53
Na, nun hat mwsnet, bzw. enigma ja wirklich die Auswahl.
:)
CenBells - Di 22.10.02 11:58
@ MAggi:
Auch eine sehr schöne Version. :lol:
@Mathias: Naja, dazu ist das Forum doch da. Nun kann er aus dem vollen schöpfen...
Delete - Di 22.10.02 12:01
Nicht ganz. Die Version von Ireniceus ist mit der von Oceanbunny identisch.
Maggi - Di 22.10.02 12:23
@Irenius
Danke :oops:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!