Autor |
Beitrag |
mwsnet
Hält's aus hier
Beiträge: 12
|
Verfasst: Sa 19.10.02 18:31
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
      
Beiträge: 619
WinXP Prof. SP3
D6 Prof.
|
Verfasst: 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
_________________ mfg Henry
|
|
mwsnet 
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
Cu Michael
|
|
Henry
      
Beiträge: 619
WinXP Prof. SP3
D6 Prof.
|
Verfasst: 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
_________________ mfg Henry
|
|
enigma
      
Beiträge: 18
|
Verfasst: Mo 21.10.02 10:49
ist es auch möglich die dateiversion auszulesen und dann in der about box anzuzeigen??
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 21.10.02 11:31
|
|
Marduk
      
Beiträge: 30
|
Verfasst: 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
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 21.10.02 12:26
Unter welchen Stichwort findet man denn das in der Delphi-Hilfe?
Und irgendwie haut das ganze auch noch nicht so hin. 
|
|
Marduk
      
Beiträge: 30
|
Verfasst: Di 22.10.02 08:56
Okay ich bin ehrlich  , 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
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Di 22.10.02 09:05
Hi
Na gut, hier ist meine Variante.
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
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 22.10.02 10:03
Noch eine Variante (auf die Versionsnummer beschränkt!) aus der Delphi-Praxis:
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? 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 22.10.02 11:03
@Mathias: Lies mal das Posting von dem Typen der nach dir gepostet hat in dem DP-Thread.... 
|
|
CenBells
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Di 22.10.02 11:50
Ich will auch, ich will auch
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
      
Beiträge: 160
WIN XP, WIN 2003
D5 Enter D 2006
|
Verfasst: Di 22.10.02 11:51
Titel: Wie wäre es damit....
Hi,
ich gebe auch mal meine Version zu Besten:
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
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 22.10.02 11:53
Na, nun hat mwsnet, bzw. enigma ja wirklich die Auswahl.

|
|
CenBells
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Di 22.10.02 11:58
@ MAggi:
Auch eine sehr schöne Version.
@Mathias: Naja, dazu ist das Forum doch da. Nun kann er aus dem vollen schöpfen...
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 22.10.02 12:01
Nicht ganz. Die Version von Ireniceus ist mit der von Oceanbunny identisch.
|
|
Maggi
      
Beiträge: 160
WIN XP, WIN 2003
D5 Enter D 2006
|
Verfasst: Di 22.10.02 12:23
@Irenius
Danke 
|
|
|