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 bei

    Computer\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 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ührungen

    Unter 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 Eintrag

    Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
    

    bei ProductName: "Windows 10 Enterprise"
    auch bei CompositionEditionID steht => Enterprise statt Pro

    Und bei WOV6432Node steht auch überall Enterprise.

    Wenn ich SystemInfo aufrufe, wird korrekt Windows 10 Pro angezeigt. Ach bei WinVer ist alles korrekt.


Anmelden zum Antworten