Um den Kompatibilitätsmodus geht es mir doch gar nicht.
Doch. Geht es. Wenn eine Anwendung keinen Manifesteintrag hat läuft es zwangsweise im Kompatiblitätsmodus. Ist seit Vista so.
Du hast das ursächliche Problem auf das ich hinaus wollte nicht verstanden. Ich kann doch auf einer z.B. 5 Jahre alten und beim Kunden installierten Software nicht im Nachhinein das Manifest aktualisieren, nur um festzustellen, ob meine SW das laufende
OS unterstützt.
Wieso nicht?
CVS auf den entsprechenden Release-Tag stellen, auschecken, manifest erweitern, Compilieren (und signieren...).
oder einfach in der Exe per Ressourcenhacker das Manifest ergänzen.
Das geht praktisch gar nicht. Demzufolge funktioniert die Versionsprüfung bei diesen Programmen nicht mehr, d.h. Win 8.1 wird nicht erkannt, denn ab dwMajorVersion = 6 und dwMinorVersion = 2 gibt's über GetVersionEx() keine aktuelle Build-Nummer mehr.
Doch! Macht es. Wenn das manifest passt liefert GetVersionEx auch die Windows10-Versionsinfo. Steht auch genauso in der
MSDN beschrieben.
Eine Windows-Versions-Prüfung macht aber - aus meiner Sicht und für meine Zwecke - nur Sinn, wenn sie jetzt schon auch mit zukünftigen, also heute noch gar nicht auf dem Markt befindlichen Windows-Versionen klar kommt. Denn, wer weiß, was sich MS mit Win 11 wieder neu einfallen lässt?
Dann macht eine Versionsprüfung keinen Sinn. Denn eine vorausschauende Prüfung funktioniert einfach nicht.
Und da ist der gemeinsame Nenner die Registry. Und wenn dann in ein paar Jahren meine jetzt aktuelle, zu dem Zeitpunkt aber schon wieder "veraltete" SW "ProductName=Windows 11" nicht kennt, dann ist das genau das, was ich brauche und erreichen will.
Wer sagt das MS (wie schon beim IE) hier nicht einfach auch nur bis Win10 den Wert reinschreibt? Dann bekommst du über diesen "gemeinsamen Nenner" auch nur eine Kompatiblitätsangabe.
Windows Vista - Eine neue Erfahrung in Fehlern.