Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   DLL-Version herausfinden (https://www.delphipraxis.net/213740-dll-version-herausfinden.html)

skoschke 18. Sep 2023 15:19

DLL-Version herausfinden
 
Hallo,

ich erstelle eine DLL mit Delphi 10.4.
In den Projektoptionen ist die Version eingetragen (z.B. 1.2.7.0)
Nun möchte ich zur Kontrolle, ob die richtige DLL im Anwendungsprogramm verwendet wird, deren Version auslesen...
Delphi-Quellcode:
function GetCurrentVersion(): string;
var
  VerInfoSize: DWord;
  VerInfo: Pointer;
  VerValueSize: DWord;
  VerValue: PVSFixedFileInfo;
  Dummy: DWord;
begin
  VerInfoSize := GetFileVersionInfoSize(PChar(getModuleName), Dummy);
  GetMem(VerInfo, VerInfoSize);
  GetFileVersionInfo(PChar(getModuleName), 0, VerInfoSize, VerInfo);
  VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
  with VerValue^ do
  begin
    Result := IntTostr(dwFileVersionMS shr 16);
    Result := Result + '.' + IntTostr(dwFileVersionMS and $FFFF);
    Result := Result + '.' + IntTostr(dwFileVersionLS shr 16);
    Result := Result + '.' + IntTostr(dwFileVersionLS and $FFFF);
  end;
  FreeMem(VerInfo, VerInfoSize);
end;
Die obige Funktion habe ich hier vor langer Zeit einmal hier gefunden:-)
Leider bekomme ich als Ergebnis "1.0.0.0" und wenn ich mit die Eigenschaften der DLL im Explorer ansehe, ist da auch nur 1.0.0.0 als Dateiversion und Produktversion angegeben!

Warum steht das 1.2.7.0 nicht in den Eigenschaften der DLL?

Ciao
Stefan

Uwe Raabe 18. Sep 2023 15:29

AW: DLL-Version herausfinden
 
Prüf mal, ob die gewünschte Version auch in der gerade verwendeten Build-Konfiguration eingetragen ist. Es gibt zwar eine Vererbung der Werte, aber die funktioniert nur solange man keine eigenen Werte in den Child-Konfigurationen hat.

Unter anderem aus diesem Grund habe ich den Project Magician geschrieben: Keep Your Project Files Clean With Project Magician - speziell der Abschnitt Clear Settings in Child Configurations

skoschke 18. Sep 2023 15:41

AW: DLL-Version herausfinden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Uwe,

so sieht die Einstellung bei mir aus (siehe Anhang)

Ciao
Stefan

himitsu 18. Sep 2023 15:46

AW: DLL-Version herausfinden
 
PS: Delphi-Referenz durchsuchenSysUtils.GetFileVersion

Es macht zwar in etwa das Gleiche, wie deine Funktion,
also gilt weiterhin das Gesagt von Uwe.

Stolle58 18. Sep 2023 16:02

AW: DLL-Version herausfinden
 
Was steht in
Code:
getModuleName
.

Uwe Raabe 18. Sep 2023 16:30

AW: DLL-Version herausfinden
 
Was ist das eigentlich für eine getModuleName Funktion ohne Parameter?

Dalai 18. Sep 2023 17:50

AW: DLL-Version herausfinden
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1527073)
Was ist das eigentlich für eine getModuleName Funktion ohne Parameter?

Wahrscheinlich eine Vereinfachung dieser: https://docwiki.embarcadero.com/Libr....GetModuleName, in dem schon hInstance o.ä. übergeben wird.

Grüße
Dalai

Uwe Raabe 18. Sep 2023 19:09

AW: DLL-Version herausfinden
 
Zitat:

Zitat von skoschke (Beitrag 1527062)
Leider bekomme ich als Ergebnis "1.0.0.0" und wenn ich mit die Eigenschaften der DLL im Explorer ansehe, ist da auch nur 1.0.0.0 als Dateiversion und Produktversion angegeben!

Ich vermute ja immer noch ein Problem in den Projekteinstellungen. Kannst du das an einem frischen DLL-Projekt reproduzieren?

Du könntest auch mal die .dproj Datei hier anhängen.

Rolf Frei 18. Sep 2023 21:59

AW: DLL-Version herausfinden
 
Dir ist schon bewusst, dass du die Versionsinfo bei allen Build-Konfiugurationen eintragen musst. Dein Screenshot von oben wird nur ein 32 Bit Release Build mit dieser Versionsnummer ergänzen. Wenn du eine Debug Build compilierst, wird da noch der Defaultwert von 1.0.0.0 drin stehen. Kontrolliere daher mal alle deine Buildkonfigs (Combobox oben im Dialog), dass du da bei allen deine gewünschte Version drin stehen hast. Das ist leider absolut idiotisch gemacht! So musst du jedes mal alle Builds aktualisieren, wenn du die Versionsnummer ändern willst.

jaenicke 18. Sep 2023 22:41

AW: DLL-Version herausfinden
 
Zitat:

Zitat von Rolf Frei (Beitrag 1527086)
So musst du jedes mal alle Builds aktualisieren, wenn du die Versionsnummer ändern willst.

Es sei denn du löschst (manuell oder mit dem oben genannten Tool) alle Versionsinformationen aus der .dproj außer der Basiskonfiguration. Dann reicht es, die Basis anzupassen.

Meistens klappt das auch, indem man die Versionsinformation einmal in allen Buildkonfigurationen genau angleicht, aber das klappt leider nicht immer.

Problematisch ist auch manchmal, wenn man die Versionsinformation nicht auf Deutschland einstellt, weil manche Tools diese Ressource dann ignorieren.

himitsu 18. Sep 2023 23:30

AW: DLL-Version herausfinden
 
Nein, nicht bei Allen .... am Einfachten garnicht bei irgendwo, außer in der Basis.

Außer man will z.B. Release und Debug oder sonstwas (z.B. SpecialBuild) config-abhängig unterschiedlich haben.





Bei uns hab ich die Version-Ressource in den Projektoptionen deaktiviert,
der FinalBuilder erstellt eine .RC und daraus eine .RES, mit dieser Info-Resource, und das wird dann in die Anwendung gelinkt.

jaenicke 18. Sep 2023 23:33

AW: DLL-Version herausfinden
 
Zitat:

Zitat von himitsu (Beitrag 1527096)
Nein, nicht bei Allen .... am Einfachten garnicht bei irgendwo, außer in der Basis.

Ich meinte das für den genannten Fall, dass man sie in allen Konfigurationen setzen muss. Dann muss man sie angleichen oder eben die "Ausnahmen" löschen, damit die Basiskonfiguration gilt und man nur noch diese anpassen muss.

skoschke 19. Sep 2023 06:38

AW: DLL-Version herausfinden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Vielen Dank für all Eure Vorschläge!

Nach allerlei probieren ist mir noch eine Einstellung in den Versionseinstellungen aufgefallen, siehe Bild!

Damit bekomme ich nun auch die gewünschten Infos mit meiner Funktion :-)

Ciao
Stefan

Rolf Frei 19. Sep 2023 18:53

AW: DLL-Version herausfinden
 
Zitat:

Zitat von himitsu (Beitrag 1527096)
Nein, nicht bei Allen .... am Einfachten garnicht bei irgendwo, außer in der Basis.

Außer man will z.B. Release und Debug oder sonstwas (z.B. SpecialBuild) config-abhängig unterschiedlich haben.





Bei uns hab ich die Version-Ressource in den Projektoptionen deaktiviert,
der FinalBuilder erstellt eine .RC und daraus eine .RES, mit dieser Info-Resource, und das wird dann in die Anwendung gelinkt.

Das funktioniert nur wenn man beim kompilieren keine automatische Buildnummer generiert. Ist diese Feature aktiv, wird wieder der falsch Baum mit der neuen Buildnummer ergänzt und der oberste Eintrag ist wieder nutzlos. Das ist einfach nur sehr praxisfern gelöst!

himitsu 19. Sep 2023 19:06

AW: DLL-Version herausfinden
 
Von Michael gab es dafür eine Consolenanwendung, welche die Version setzte,
aber ich weiß nicht ob es mit aktuellen Delphis noch geht ... Luckie war damals bis TurboDelphi (Delphi 2006) mitgegangen.

http://backups.geheimniswelten.de/ww...amme/index.htm
da nicht entdeckt .... vielleicht hier mal den zugehörigen Thread suchen


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 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