AGB  ·  Datenschutz  ·  Impressum  







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

Info-Fenster von Windows anzeigen

Ein Thema von Willie1 · begonnen am 16. Aug 2015 · letzter Beitrag vom 17. Dez 2016
Antwort Antwort
Seite 5 von 5   « Erste     345   
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#41

AW: Info-Fenster von Windows anzeigen

  Alt 15. Dez 2016, 17:31
Du musst in deinem Anwendungsmanifest angeben, dass deine Anwendung mit Windows 10 kompatibel ist, dann wird auch alles korrekt angezeigt.
Wer schummeln möchte, darf auch gern RtlGetVersion aus der ntdll.dll bemühen:
Code:
NTSTATUS
NTAPI
RtlGetVersion(
    LPOSVERSIONINFOEXW lpVersionInformation
);
Also wenn mich mein Delphi-Foo nicht ganz verlassen hat, sollte das in etwa so aussehen:
Delphi-Quellcode:
type
    NTSTATUS = LONG; // oder JwaWinType.pas
// JwaWinNT.pas hat OSVERSIONINFOEXW ... und nein, es ist kein Schreibfehler daß es die W-Version ist
function RtlGetVersion(var osvix: OSVERSIONINFOEXW): NTSTATUS; stdcall;
// Nicht vergessen dwOSVersionInfoSize auszufüllen vor dem Aufruf!!!
Da gibt's dann die ehrliche Version auch ohne Manifest.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#42

AW: Info-Fenster von Windows anzeigen

  Alt 15. Dez 2016, 17:38
Aber wenn der Programmierer mit dem Manifest selbst bestimmt, welche Version es sein soll, ist eine Abfrage wohl tatsächlich unnötig. Ich verstehe die Absicht von Microsoft nicht!
Es hat sich einiges an Semantik in den einzelnen Windowsversionen geändert. In Anniversary-Release wäre da bspw. die Nutzung langer Pfadnamen (nicht mehr PATH_MAX == 260) zu nennen.

Programme ab Windows XP dürfen sich aussuchen welche Version der Common Controls sie benutzen. Auch das wird über das Manifest gesteuert.

Im Grunde besagt das Manifest also: Hör mal, ich weiß bescheid über die Eigenheiten von Windows X.Y, keine Notwendigkeit mir was vorzugaukeln. Dementsprechend sollte so ein Programm dann aber auch über High-DPI und andere moderne Funktionen bescheid wissen und sich entsprechend verhalten.

Raymond Chen hat schon vor langer Zeit darüber geschrieben warum die Versionsabfragen unheimlich kompliziert sind und warum neuere Windowsversionen schummeln müssen. Viele ältere Programme haben nämlich selten dämliche Versionsprüfungen eingebaut (so nach dem Motto: Hauptversion >=5 und Unterversion >=1 ... und dann meinen man hätte alle Windowsversionen ab XP abgedeckt). Daher auch die neueren Funktionen ala MSDN-Library durchsuchenVerifyVersionInfo. Da aber ältere Programme sich nicht verändern und damit auch kein Manifest bekommen werden in dem steht "ick kenn mir aus mit Windows 10, wa?!", funktioniert die von MS beabsichtigte Methode zur Rückwärtskompatibilität erstaunlich gut.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#43

AW: Info-Fenster von Windows anzeigen

  Alt 16. Dez 2016, 08:53
Aber wenn der Programmierer mit dem Manifest selbst bestimmt, welche Version es sein soll, ist eine Abfrage wohl tatsächlich unnötig. Ich verstehe die Absicht von Microsoft nicht!
Wie Assarbad schon geschrieben hat, liegt der Grund in fehlerhaften Versionsprüfungen durch viele Entwickler in der Vergangenheit.

Viele haben einfach wie Assarbad schrieb auf >= Version XY geprüft, viele aber auch auf Majorversion = 5 usw.
Dadurch liefen viele Programme nur durch die Versionsprüfung nicht unter neueren Versionen von Windows und andere ließen sich starten, funktionierten aber nicht.

Die einzig sinnvolle Versionsprüfung wäre auf das Feature zu prüfen, das man benötigt. Denn wenn man etwas verwendet, das in einer neueren Version nicht mehr drin ist, hilft es nix, dass die Version >= Version XY ist...
Und umgekehrt wurden auch schon Features per Update zur Verfügung gestellt, z.B. einiges in XP SP3. Anwendungen, die auf die Windowsversion prüfen, würden dann aber nicht funktionieren obwohl das Feature dort dann doch verfügbar ist.

Durch die Angabe im Manifest für welche Version eine Anwendung entwickelt wurde, kann Windows nun spezifische Kompatibilitätsoptionen automatisch anwenden, weil es weiß was es in der Version gab.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#44

AW: Info-Fenster von Windows anzeigen

  Alt 16. Dez 2016, 09:10
Die einzig sinnvolle Versionsprüfung wäre auf das Feature zu prüfen, das man benötigt.
Genau das ermöglicht natürlich bekanntlich COM, aber man muß Kopfstände machen um das auch nutzen zu können, weil bei zu niedriger Angabe der WINVER die entsprechenden Symbole und GUIDs einfach versteckt werden. Warum sollte es auch nicht einem für Windows 2000 geschriebenen Programm möglich sein auf Windows 7 die Fortschrittsleiste in der Taskbar zu benutzen? Ermitteln ob man das COM-Interface instanziieren kann, würde als Prüfung ausreichen.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)

Geändert von Assarbad (16. Dez 2016 um 10:43 Uhr) Grund: Schlechtschreibung (fehlendes Komma)
  Mit Zitat antworten Zitat
mm1256

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

AW: Info-Fenster von Windows anzeigen

  Alt 16. Dez 2016, 10:20
Aus diesen Gründen (einfach+zuverlässig, auch in Zukunft, egal was MS irgendwann mal wieder anstellt) verwende ich zur Windows-Versions-Bestimmung die FileInfo aus der kernel32.dll. Dazu brauchst du weder COM, Manifest, Win-API oder sonst welches Gedöns.
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
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#46

AW: Info-Fenster von Windows anzeigen

  Alt 16. Dez 2016, 10:43
Na dann viel Erfolg. Falls dein Programm wirklich so supercool sein sollte, kannst du vermutlich allerlei anstellen und MS wird sich danach bemühen die Kompatibilität zu neueren Windowsversionen für dich zu gewährleisten. So wie sie es auch in der Vergangenheit machten. Ansonsten fällst du unter Umständen durch's Raster. Aber das ist schließlich deine Sache, denn du verläßt dich auf etwas zu dem MS keinen Vertrag abgeschlossen hat. Die API hingegen ist ein Vertrag auf den du dich verlassen kannst. Kurzum: du trägst das volle Risiko.

Im übrigen bist du mit deiner Methode dann wieder bei händischen Versionsüberprüfungen ala (Hauptversion >=5 und Unterversion >=1). Ich will nicht anzweifeln, daß du es richtig hinbekommen kannst, aber können und machen sind zwei verschiedene Handschuhe.

Die von jaenicke vorgeschlagene Methode ist aber in jedem Fall überlegen, da sie darauf abzielt, daß das Programm ermittelt welche Funktionen in der Laufzeitumgebung bereitstehen und sich dementsprechend verhält. Das hat auch nix mit COM per-se zu tun, sondern COM funktioniert nach diesem Blackbox-Prinzip. Will heißen wenn du eine GUID/CLSID hast dann kannste dich darauf verlassen, daß wenn du das Interface instanziieren kannst, es auch da ist.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#47

AW: Info-Fenster von Windows anzeigen

  Alt 16. Dez 2016, 11:00
Aus diesen Gründen (einfach+zuverlässig, auch in Zukunft, egal was MS irgendwann mal wieder anstellt) verwende ich zur Windows-Versions-Bestimmung die FileInfo aus der kernel32.dll.
Und genau deshalb gibt es bei Microsoft die Überlegung bei der Prüfung der Versionen solcher System-DLLs ebenfalls emulierte Werte zurückzuliefern...
Eben weil durch die Umgehung der offiziellen Wege genau die genannten Probleme weiter da sind. Durch dieses Gefrickel durch diverse Programmierer ist der ganze Kompatibilitätslayer ja nur so kompliziert.

Wenn du natürlich nur einen Notepad-Klon schreibst, ist die Wahrscheinlichkeit, dass du ein bestimmtes Feature brauchst, nicht so hoch. Da braucht man aber eigentlich auch keine Versionsinfo-Prüfung. Aber bei allen etwas komplexeren Projekten sollte man das ganze schon sauber lösen.

Die Featureprüfung geht natürlich auch bezogen auf API-Funktionen. Wenn ich eine bestimmte API-Funktion brauche, schaue ich einfach nach, ob diese da ist. Fehlt diese in früheren oder zukünftigen Windowsversionen, weiß ich, dass mein Programm dort definitiv nicht funktioniert und kann das auch so dem Benutzer anzeigen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
mm1256

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

AW: Info-Fenster von Windows anzeigen

  Alt 16. Dez 2016, 16:50
Hab's mir schon gedacht, dass ihr diese Vorgehensweise "zerlegt". Fakt ist aber, dass die Fileinfo Bestandteil des PE-Aufbaus ist und sich in zig Jahren nicht geändert hat und sich wohl zukünftig auch nicht ändern wird, denn sonst würde man alles abschießen, was es mal vorher gegeben hat. Und darum ist die Fileinfo eine zukunftsfähige Lösung. Auch wenn Windows wieder mal an der API rum schrauben sollte. Dann gehen nämlich z.B. die Manifeste wieder genauso den Bach runter, wie beim Wechsel von 8.0 zu 8.1.
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
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#49

AW: Info-Fenster von Windows anzeigen

  Alt 17. Dez 2016, 00:02
Fakt ist aber, dass die Fileinfo Bestandteil des PE-Aufbaus ist und sich in zig Jahren nicht geändert hat und sich wohl zukünftig auch nicht ändern wird
Darum geht es auch gar nicht so sehr. Das Problem ist ja die fehlerhafte Verwendung der so gewonnenen Daten durch sehr viele Programmierer.
Wenn alle das nur in einem Info-Fenster anzeigen würden und sich nen Kullerkeks drüber freuen würden, wäre das ja kein Problem. Problematisch wird es wie gesagt, wenn auf dem Wege versucht wird festzustellen, ob das eigene Programm unter der Windowsversion läuft.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 5   « Erste     345   

 

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 08:18 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