Delphi-PRAXiS

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]

delphinia 27. Sep 2011 15:32

AW: EXE FileVersion auslesen
 
Das heisst ich bilde mir das nicht ein das hier etwas nicht richtig läuft?!
Was mache ich nun dagegen das ich an die richtigen Infos komme?

himitsu 27. Sep 2011 15:34

AW: EXE FileVersion auslesen
 
Schauen ob es einen QC-Eintrag dazu gibt.
Wenn nicht, dann selber melden.
Und hoffen die arbeiten zur Abwechslung mal schnell und bringen den Bugfix nicht erst im XE3 raus.


Denn du müßtest dazu ja selber die EXE-Header parsen und dabei aufpassen, daß du dieses nur für XE2-Compilate durchführst, denn sonnst sollte es ja überall funktionieren.

delphinia 27. Sep 2011 15:43

AW: EXE FileVersion auslesen
 
scheint schon gemeldet zu sein
http://qc.embarcadero.com/wc/qcmain.aspx?d=98487
zumindest sieht es ganz nach der Geschichte aus! Ob es aber behoben wird oder nicht keine ahnung!

himitsu 27. Sep 2011 16:02

AW: EXE FileVersion auslesen
 
Ne, ist was Anderes.

Aber daß sich der Build-Zähler nicht mehr bei einem Build hochzählt, hatte hier auch schonmal jemand irgendwo gepostet. :lol:

delphinia 27. Sep 2011 16:16

AW: EXE FileVersion auslesen
 
Acuh wenn es etwas andere ist für mich sieht es sehr nach meinem Problem aus und tatsächlich lässt sich die richtige Versionsnummer durch deaktivieren der "Build-Nummer automatischen hochzählen" beheben!


Mit aktivierter Option bekomme ich komischen Zahlensalat als Versionsinfo
und OHNE bekomme ich die richtige Versionsinfo!

Hoffe das die das schnell beheben das geht ja gar nicht :)

Union 27. Sep 2011 16:18

AW: EXE FileVersion auslesen
 
Zitat:

Hoffe das die das schnell beheben das geht ja gar nicht
Wird wahrscheinlich nicht behoben, da absichtlich so programmiert. Das ist ein "echtes" Feature: Die Nummern werden nämlich aus Datum und Uhrzeit gebildet.

Aber das Problem mit den Modulkennzeichen bleibt bestehen.

delphinia 27. Sep 2011 16:22

AW: EXE FileVersion auslesen
 
Pardon das sehe ich als Fehler an - wenn es ne Option gibt - Buildzähler mit datum verwenden oder so OK!
Aber hier handelt es sich um die seit anbegin von Delphi bekannte Funktion um die BUILD automatisch um 1 hoch zu zählen! Und ich habe so etwas auch noch nicht dokumentiert gesehen! Für mich ist das einen Fehlfunktion

Union 27. Sep 2011 16:29

AW: EXE FileVersion auslesen
 
Der Fall ist schon erledigt, CLOSED - As Designed. Du könntest ein Feature-Request machen, dass man das alte Verhalten optional verwenden kann. Da die ganze Projekt- und Versionsverwaltung ja eh komplett für den A.. ist und überarbeitet werden muss.

delphinia 27. Sep 2011 16:31

AW: EXE FileVersion auslesen
 
ich mache da nix, da ich durch das ganze System da nicht durchsteige!

Union 27. Sep 2011 16:37

AW: EXE FileVersion auslesen
 
Dann musst Du mit dem Problem weiterleben. Es ist ein ganz normales Support-Ticketingsystem das schon seit Ewigkeiten genutzt wird. Ist als Client in die Tools integriert oder per Webinterface. Liefert ja auch Infos und Workarounds. Lohnt sich also schon. Und wenn sich niemand beschwert denken sie noch sie haben ein tolles, fehlerfreies Produkt abgeliefert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 Uhr.

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