AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetVersionEx unter Windows 10

Ein Thema von greenmile · begonnen am 18. Dez 2014 · letzter Beitrag vom 21. Dez 2014
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#1

GetVersionEx unter Windows 10

  Alt 18. Dez 2014, 08:42
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.

Geändert von greenmile (18. Dez 2014 um 08:45 Uhr)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: GetVersionEx unter Windows 10

  Alt 18. Dez 2014, 08:50
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: GetVersionEx unter Windows 10

  Alt 18. Dez 2014, 08:59
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: GetVersionEx unter Windows 10

  Alt 18. Dez 2014, 09:49
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

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)
$2B or not $2B
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: GetVersionEx unter Windows 10

  Alt 18. Dez 2014, 10:57
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.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen

Geändert von mm1256 (18. Dez 2014 um 11:01 Uhr)
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: GetVersionEx unter Windows 10

  Alt 18. Dez 2014, 11:02
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>
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: GetVersionEx unter Windows 10

  Alt 18. Dez 2014, 19:15
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.

MSDN-Library durchsuchenIsWindowsVersionOrGreater

Die anderen Version-Helper-Funktionen werden am Ende bestimmt auch nur auf diese API gehen.
$2B or not $2B
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#8

AW: GetVersionEx unter Windows 10

  Alt 18. Dez 2014, 20:49
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.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#9

AW: GetVersionEx unter Windows 10

  Alt 18. Dez 2014, 22:05
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.

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
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: GetVersionEx unter Windows 10

  Alt 18. Dez 2014, 22:15
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 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.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 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