Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   EXE FileVersion auslesen (https://www.delphipraxis.net/163326-exe-fileversion-auslesen.html)

delphinia 24. Sep 2011 18:17

Delphi-Version: XE

EXE FileVersion auslesen
 
Hallo ich habe auf einmal das Problem (weiss nicht ob es an XE o. W/ liegt habe beides zeitlgeich gewechselt) das ich nur noch Müll beim Auslesen meienr Exe File Version erhalte...


Nutze bis dato ohne Fehler:
Delphi-Quellcode:
function GetFileVersion(const FileName: string): string;
var i, W: LongWord;
  P: Pointer;
  FI: PVSFixedFileInfo;

begin
  Result := 'NoVersionInfo';
  i := GetFileVersionInfoSize(PWideChar(FileName), W);



  if i = 0 then Exit;
  GetMem(P, i);
  try
    if not GetFileVersionInfo(PWideChar(FileName), W, i, P)
      or not VerQueryValue(P, '\', Pointer(FI), W) then Exit;
    Result := IntToStr(FI^.dwFileVersionMS shr 16)
      + '.' + IntToStr(FI^.dwFileVersionMS and $FFFF)
      + '.' + IntToStr(FI^.dwFileVersionLS shr 16)
      + '.' + IntToStr(FI^.dwFileVersionLS and $FFFF);
    if FI^.dwFileFlags and VS_FF_DEBUG <> 0 then Result := Result + ' debug';
    if FI^.dwFileFlags and VS_FF_PRERELEASE <> 0 then Result := Result + ' beta';
    if FI^.dwFileFlags and VS_FF_PRIVATEBUILD <> 0 then Result := Result + ' private';
    if FI^.dwFileFlags and VS_FF_SPECIALBUILD <> 0 then Result := Result + ' special';
  finally
    FreeMem(P);
  end;
end;

Nun bekomme ich total andere Werte... keine Ahnung warum

Union 24. Sep 2011 18:43

AW: EXE FileVersion auslesen
 
Ich habe das jetzt mal mit einem frischen XE2 Projekt probiert und es funktioniert einwandfrei:
Delphi-Quellcode:
ShowMessage(GetFileVersion(Application.ExeName)) -> 1.0.0.0
Allerdings stecken die Attribute (debug usw.) nicht in FileFlags sondern in FileFlagsMask.

delphinia 24. Sep 2011 18:46

AW: EXE FileVersion auslesen
 
Verstehe ich nicht...

Ich habe unter Windows 7 64BIT -- nur eine ganz komische Zahl - selbige die auch im Explorere Angezeigt bekomme wenn ich auf eigenschaften klicke!

Einen Nummer die ich nicht beinflussen kann

Union 24. Sep 2011 18:52

AW: EXE FileVersion auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also wenn ich mir die Details im Explorer anzeigen lasse (64 bit W2k8r2) sehen die Ok aus:

delphinia 24. Sep 2011 18:56

AW: EXE FileVersion auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
wie ich schon 2 mal schrieb Windows 7 nutze ich! Vor dem Wechsel hatte ich das Problem nicht!

Siehe Screenshot!

Union 24. Sep 2011 19:56

AW: EXE FileVersion auslesen
 
Also der Windows-Server 2008 ist vom Kern identisch mit Windows 7. Ich habe die "User Experience" ausgeschaltet wegen RDP.

himitsu 24. Sep 2011 21:11

AW: EXE FileVersion auslesen
 
Zitat:

Zitat von Union (Beitrag 1126463)
Allerdings stecken die Attribute (debug usw.) nicht in FileFlags sondern in FileFlagsMask.

Hä?

In Flags stecken die gesetzen Attribute und in Mask stecken die gültigen Attribute, welche in Flags gesetzt sein könnten.

Definition der Bits:
Flags=0 Mask=0 : Wert nicht vorhanden
Flags=0 Mask=1 : Wert nicht vorhanden
Flags=1 Mask=0 : Wert nicht gesetzt
Flags=1 Mask=1 : Wert gesetzt

Union 24. Sep 2011 21:21

AW: EXE FileVersion auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich rede nicht von der Definition laut MS sondern davon wie es in XE abläuft. Im Bild links der Record im Debugger, rechts die Projektoptionen.

himitsu 24. Sep 2011 21:36

AW: EXE FileVersion auslesen
 
Dann wäre das ja ein Bug, welchen die hoffentlich in XE3 behoben haben werden ... nur deswegen den Code jetzt zu verändern würde ich deswegen nicht :angle2:

Was ist, wenn du die Attribute nicht gesetzt hast?

Union 24. Sep 2011 21:44

AW: EXE FileVersion auslesen
 
Wenn ich in den Optionen etwas an den Modulattributen ändere, spiegelt sich das ausschließlich im dwFileFlagsMask wieder. Z.b. nur Debug angekreuzt = 1.

Frage mich aber was man da für Fehler machen kann. Die Struktur ist richtig, und es wird eine Winapi-Funktion aufgerufen. Delphi 7 Kennt die W-Typen noch nicht und 2009 startet bei mir nicht mehr nach der XE2 Installation.

[edit]
Es ist definitiv ein Fehler - aber nicht beim Auslesen sondern beim Speichern während des Buildvorganges. Beim Einlesen der Info aus einer "Fremden" exe stimmt es:

Code:
Name des Ausdrucks      Wert
dwFileFlagsMask   63 {$3F}
dwFileFlags   8
[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz