![]() |
GetVersionEx unter Windows 10
Hallo,
GetVersionEx meldet in meinem Delphi XE3 Programm immer "6.2", also Windows 8. Das liegt an einem netten "Feature" von Microsoft, siehe ![]() |
AW: GetVersionEx unter Windows 10
Allem Anschein nach verabschiedet sich MS von den konkreten Versionsnummern als Entscheidungskriterium und möchte uns Entwickler dazu bewegen, auf Releases zu prüfen:
![]()
Ich denke da an einen Delphi-Wrapper, der einem diese ganze Fragerei wegkapselt. |
AW: GetVersionEx unter Windows 10
Hatte ich auch gesehen, ich habe vergleichbare Funktionen auch in einer Unit, die haben meine Idee geklaut ;)
Damit kann ich aktuell aber leider nicht prüfen, ob es Windows 10 ist (es gibt nur 8.1 or greater). Bleibt mir eigentlich nur noch dieses Manifest. |
AW: GetVersionEx unter Windows 10
Zitat:
![]() Beschreibungen kannst du im Thread vom ![]() (ich muß dann nur nochmal eine aktuelle Version der ManifestCreatorLang.xml im ersten Post anpinnen ... Den Wert für Windows 10 findet man am Ende des Threads) |
AW: GetVersionEx unter Windows 10
Hallo,
"die spinnen doch, die Römer"....aber mal im Ernst. Ob die Gründe die MS hat nun sinnvoll sind oder nicht, darüber mag man unterschiedlicher Meinung sein. Bei jeder Windows-Version an den Manifesten rum schrauben ist mir persönlich zu blöd. Damit meine SW abwärtskompatibel zu den älteren OS bleibt lese ich nach wie vor mit GetVersionEx die TOSVersionInfoEx aus, und aktualisiere dann die TOSVersionInfoEx.dwBuildNumber (die ich dann auch auswerte) aus der Registry. Das mag zwar etwas blauäugig sein, und aus programmiertechnischer Sicht nicht das Feinste, es funzt aber. Und solange MS die Registry bedient wird es mit jeder neuen Windows-Version ohne Änderung funktionieren. Hat auch funktioniert, als die ersten meiner Kunden meine Software mit der Technical Preview ausprobiert haben. Sprich, die SW hat ein unbekanntes OS erkannt, und den Programmstart abgelehnt. |
AW: GetVersionEx unter Windows 10
Hier das Manifest für alle, die es noch brauchen. Einfach mit BRCC32 compilieren, einbinden und schon spuckt Windows die korrekte Nummer aus:
Code:
<?xml version="1.0" encoding="utf-8" ?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- Windows 8.1 --> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> <!-- Windows Vista --> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!-- Windows 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> <!-- Windows 8 --> <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> <!-- Windows 10 --> <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> </application> </compatibility> <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>True/PM</dpiAware> </asmv3:windowsSettings> </asmv3:application> </asmv1:assembly> |
AW: GetVersionEx unter Windows 10
Zitat:
![]() Die anderen Version-Helper-Funktionen werden am Ende bestimmt auch nur auf diese API gehen. |
AW: GetVersionEx unter Windows 10
Seit Windows 8.1 ist GetVersion/GetVersionEx nicht mehr zuverlässig.
Die folgende Komponente ist bis Windows 7 kompatibel und lässt sich sehr einfach bis Windows 10 erweitern: ![]() Ab Windows 8 lese ich nur noch die Registry aus, da Windows 8.1 glaube ich als Windows 8 identifiziert wird. |
AW: GetVersionEx unter Windows 10
Mir gefällt diese Entscheidung von MS auch nicht, aber mal ernsthaft: ob man nun im eigenen Code Anpassungen an neue Windows-Versionen macht oder das Manifest ändert, ist doch egal - neu kompilieren muss man sowieso.
Zitat:
MfG Dalai |
AW: GetVersionEx unter Windows 10
Zitat:
Zitat:
Bei der Gelegenheit möchte ich mal eine Frage in den Ring werfen: warum verwendet man die Versionsprüfung? 1. Um im Code auf die verschiedenen Windows-Versionen reagieren zu können 2. Um zu verhindern, dass das Programm NICHT mit neueren bzw. unbekannten Windows-Versionen läuft ...oder was sonst noch? Für [1] sind die Manifeste und das entsprechende API ja wunderbar geeignet, aber für [2] ??? Das ging doch zwischen 7/8/8.1 total in die Hose, wenn man nicht gleich bei 8.0 aufgepasst hat. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz