Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   GetVersionEx unter Windows 10 (https://www.delphipraxis.net/183179-getversionex-unter-windows-10-a.html)

greenmile 18. Dez 2014 07:42

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 http://forum.delphi-treff.de/index.p...r-Windows-8-1/. Anscheinend muss man für 10 ein Manifest einbinden. Hat jemand Informationen, wie die Datei auszusehen hat? Oder hat die womöglich jemand? Viel Informationen findet man leider nicht darüber, die Link oben war fast der einzige für Delphi.

Daniel 18. Dez 2014 07:50

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:

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
  • IsWindows7OrGreater
  • IsWindows7SP1OrGreater
  • IsWindows8OrGreater
  • IsWindows8Point1OrGreater
  • IsWindowsServer
  • IsWindowsVistaOrGreater
  • IsWindowsVistaSP1OrGreater
  • IsWindowsVistaSP2OrGreater
  • IsWindowsXPOrGreater
  • IsWindowsXPSP1OrGreater
  • IsWindowsXPSP2OrGreater
  • IsWindowsXPSP3OrGreater
  • IsWindowsVersionOrGreater
Man müsste also erst prüfen, ob eine der genannten Funktionen in der Kernel32.dll vorhanden ist und ggf. auch nutzen - wenn nicht, dann auf die alten Funktionen ausweichen, die dann ja - da man offenbar auf einem älteren Windows ist - zuverlässig laufen.
Ich denke da an einen Delphi-Wrapper, der einem diese ganze Fragerei wegkapselt.

greenmile 18. Dez 2014 07:59

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.

himitsu 18. Dez 2014 08:49

AW: GetVersionEx unter Windows 10
 
Zitat:

Zitat von greenmile (Beitrag 1283832)
Anscheinend muss man für 10 ein Manifest einbinden. Hat jemand Informationen, wie die Datei auszusehen hat? Oder hat die womöglich jemand? Viel Informationen findet man leider nicht darüber, die Link oben war fast der einzige für Delphi.

http://forum.delphi-treff.de/index.p...243#post438243 :roll:

Beschreibungen kannst du im Thread vom Hier im Forum suchenManifest-Creator finden.
(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)

mm1256 18. Dez 2014 09:57

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.

greenmile 18. Dez 2014 10:02

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>

himitsu 18. Dez 2014 18:15

AW: GetVersionEx unter Windows 10
 
Zitat:

Zitat von greenmile (Beitrag 1283835)
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).

Dann hast du bestimmt falsch geguckt. :zwinker:

MSDN-Library durchsuchenIsWindowsVersionOrGreater

Die anderen Version-Helper-Funktionen werden am Ende bestimmt auch nur auf diese API gehen.

dGeek 18. Dez 2014 19:49

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:
http://www.delphipraxis.net/97999-%5...erkennung.html

Ab Windows 8 lese ich nur noch die Registry aus, da Windows 8.1 glaube ich als Windows 8 identifiziert wird.

Dalai 18. Dez 2014 21:05

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:

Zitat von dGeek (Beitrag 1284026)
Seit Windows 8.1 ist GetVersion/GetVersionEx nicht mehr zuverlässig.

[...]

Ab Windows 8 lese ich nur noch die Registry aus, da Windows 8.1 glaube ich als Windows 8 identifiziert wird.

Und die Registry ist deiner Meinung nach zuverlässiger?

MfG Dalai

mm1256 18. Dez 2014 21:15

AW: GetVersionEx unter Windows 10
 
Zitat:

Zitat von dGeek
Ab Windows 8 lese ich nur noch die Registry aus, da Windows 8.1 glaube ich als Windows 8 identifiziert wird.

Mit GetVersionEx .... richtig, dafür gibts ja die neue API.

Zitat:

Zitat von Dalai
Und die Registry ist deiner Meinung nach zuverlässiger?

Ich gehe ja auch den parallelen Weg über die Registry. Zuverlässiger...bin ich voll deiner Meinung, zuverlässiger ist das sicher nicht. Aber zumindest ist für eine ältere App für Windows 7 compiliert ein Unterschied erkennbar gewesen, zwischen Windows 7, 8.0 und Windows 8.1.

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 07:07 Uhr.
Seite 1 von 4  1 23     Letzte »    

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