Merkwürdigkeiten bei Auslesen von Registry-Angaben zur Windows-Version
-
Ich wollte einigen Angaben aus der Registry lesen
string subKey2 = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion"; Microsoft.Win32.RegistryKey key2 = Microsoft.Win32.Registry.LocalMachine; Microsoft.Win32.RegistryKey skey2 = key2.OpenSubKey(subKey2); System.String[] ParaKeys2 = skey2.GetValueNames(); if (ParaKeys2.Contains("EditionID")) // Enterprise { sEditionID = skey2.GetValue("EditionID").ToString(); } if (ParaKeys2.Contains("ProductName")) // Windows 10 Enterprise { sProductName = skey2.GetValue("ProductName").ToString(); }
Parallel zum VS2022 Editor schaue ich mir das in Regedit an.
Dort sehe ich beiComputer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion ProductName = Windows 10 Pro
Im Programm erhalte ich jedoch "Enterprise", obwohl ich Pro habe.
Ich habe in Regedit nach "Windows 10 Enterprise" gesucht und bin tatsächlich fündig geworden.Es gibt diesen Eintrag bei
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion
Da wird (vom VS2022 ? ) "WOW6432Node" eingeschoben, obwohl ich das nicht angegeben habe.
Was muss man tun, um bei
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
und nicht bei
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion
die Daten auszulesen ?
Warum dort fälschlicherweise "Enterprise" steht ist eine andere Frage und hat mit VS2022 nichts zu tun. Es gibt weitere Angaben, die nicht übereinstimmen.
-
Jetzt habe ich folgendes gefunden...
Wenn ich in den Projekt-Eigenschaften als Zielplattform X64 angebe, dann klappt es,
bei "Any CPU" oder X86 liest er bei WOW6432Node.
-
@hkdd sagte in Merkwürdigkeiten bei Auslesen von Registry-Angaben zur Windows-Version:
WOW6432Node
-
@hkdd WOW steht für "Windows on Windows" und virtualisiert eine andere Windowsversion auf Windows.
Ursprünglich, um 16-Bit Programme auf 32-Bit-Systemen laufen zu lassen.
Das WOW6432 läßt 32-Bit-Programme auf 64-Bit-Systemen laufen. (16-Bit-Programme laufen nicht mehr)
-
@SideWinder
Bei Deinem Link sehe ich gleich am Anfang die folgenden AusführungenUnter 64-Bit-Windows werden Teile der Registrierungseinträge für 32-Bit-Anwendungen und 64-Bit-Anwendungen separat gespeichert und mithilfe des Registrierungsredirectors und der Registrierungsreflektion separaten logischen Registrierungssichten zugeordnet, da die 64-Bit-Version einer Anwendung möglicherweise andere Registrierungsschlüssel und -werte verwendet als die 32-Bit-Version. Es gibt auch freigegebene Registrierungsschlüssel, die nicht umgeleitet oder widergespiegelt werden.
Da ja 32- und 64-bit Programme gleichzeitig und nebeneinander im gleichen Windows laufen, sollten doch für beide (X64 und X86) zu denselben Keys auch dieselben Werte geliefert werden und nicht bei AnyCPU=Win10Enterprise und bei X64=Win10Pro.
Das ist aber ein Windows- und kein C# Problem, da man ja beim Überprüfen mit RegEdit sieht, dass es diese Merkwürdigkeiten (Unterschiede) tatsächlich so in der Registry-Datei gibt.
-
Dass bei Windows 10 Pro im "WOW6432Node" Key "Windows 10 Enterprise" steht scheint wohl bei allen so zu sein. Also zumindest auch bei mir und man findet auch ein paar Fragen dazu im Netz. Hab aber keine Antworten gefunden warum das so ist.
Könnte sein dass das einfach ein Fehler ist. Könnte aber auch sein dass es einen mehr oder weniger guten Grund dafür gibt. Wobei mir jetzt auf die Schnelle keiner einfallen würde.
-
@hustbaer ,
ich habe auf meinem Laptop, auf dem auch Win10 und 11 parallel installiert sind, in der Win10 Registry gesucht, da steht sogar beim normalen EintragComputer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
bei ProductName: "Windows 10 Enterprise"
auch bei CompositionEditionID steht => Enterprise statt ProUnd bei WOV6432Node steht auch überall Enterprise.
Wenn ich SystemInfo aufrufe, wird korrekt Windows 10 Pro angezeigt. Ach bei WinVer ist alles korrekt.