Die Registrierungsschlüssel für 32-Bit und 64-Anwendungen getrennt sind, können Sie Sie können nicht direkt auf die 64-Bit-Registrierung von Ihrer 32-Bit-Anwendung zugreifen. In Ihrem Fall existiert die erforderliche Struktur nicht in dem 32 Bit Teil der Registrierung, dann können Sie nur auf den übergeordneten Ordner zugreifen.
Von MSDN:
Auf 64-Bit-Windows, Teile der Registrierungseinträge für separat gespeichert werden, 32-Bit-Anwendung und 64-Bit-Anwendungen und in separate logische Registrierungs Ansichten mithilfe der Registrierung Redirector und Registry kartiert Reflektion, da die 64-Bit-Version einer Anwendung möglicherweise andere Registrierungsschlüssel und -werte verwendet als die 32-Bit-Version. Es gibt auch gemeinsame Registrierungsschlüssel, die nicht umgeleitet oder reflektiert werden.
Sie können die Liste auf MSDN lesen: Registry Keys Affected by WOW64. Leider wird die SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
nicht erwähnt, aber es ist auch betroffen.
Lösung
Was müssen Sie tun, ist fragen explizit RegOpenKeyEx
die 64-Bit-Teil der Registrierung zuzugreifen. Dies kann durch Hinzufügen des Flags KEY_WOW64_64KEY
zu Ihrem Aufruf geschehen (Sie können auf die 32-Bit-Registrierung von einer 64-Bit-Anwendung aus zugreifen, indem Sie KEY_WOW64_32KEY
verwenden). Bitte beachten Sie, dass dieses Flag unter Windows 2000 nicht unterstützt wird. Wenn Ihre Anwendung mit dieser (alten) Version kompatibel sein muss, müssen Sie den Fall verwalten.
Weitere Informationen finden Sie unter diesem Link auf MSDN: Accessing an Alternate Registry View.
Um es einfach zu machen, einfach Ihren Anruf aus ändern:
returnStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"),
0, KEY_ALL_ACCESS, &hKey);
zu:
returnStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"),
0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hKey);
Hinweis
Beachten Sie, dass Sie den Schlüssel nur über seine Pfad zugreifen können, ohne alle Flags mit dieser HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
. Da der Wow6432
Knoten ist virtualisierten Knoten von WOW64 verwendet, aber Sie sollten sich nicht darauf verlassen, es ist stabil, aber es sollte als eine Implementierung Detail Änderung zu betrachten.
Referenzen
- Registry Virtualization auf MSDN.
- Leser meine finden interessante Tipps zu diesem Post: http://poshcode.org/2470, es ist für die PowerShell, aber es erklärt, wie auf WMI-Daten (relativ zum 64-Bit-Registrierungsteil) von einer 32-Bit-Anwendung zugreifen.
Ist es eine 32-Bit-Anwendung? –