Estoy tratando de obtener todos los nombres para mostrar de las subclaves dentro de esta clave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Con este código:
RegistryKey newKey;
string val;
string KeyPath64Bit = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
RegistryKey mainKey = Registry.LocalMachine.OpenSubKey(KeyPath64Bit);
string[] RegKeys64Bits = Registry.LocalMachine.OpenSubKey(KeyPath64Bit).GetSubKeyNames();
foreach (string s in RegKeys64Bits)
{
newKey = mainKey.OpenSubKey(s);
val = newKey.GetValue("DisplayName", -1, RegistryValueOptions.None).ToString();
if (val != "-1")
file64.WriteLine(val);
}
Después de ejecutar el código, no puedo encontrar una de las claves que necesito:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
Y debería tener el nombre para mostrar: Microsoft Visual C ++ 2010 x64 Redistributable - 10.0.30319, pero en su lugar el GetSubKeyNames()
método me da la subclave : {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757
que no tiene ningún nombre para mostrar.
¿Por qué no puedo obtener la subclave exacta que necesito ( {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
) y cómo puedo obtenerla?
Respuestas:
Una aplicación de 32 bits en un sistema operativo de 64 bits buscará en el
HKLM\Software\Wow6432Node
nodo de forma predeterminada. Para leer la versión de 64 bits de la clave, deberá especificarRegistryView
:using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) using (var key = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")) { // key now points to the 64-bit key }
La API para hacer esto se agregó en .NET 4.0; Si todavía usa 3.5, deberá usar P / Invoke para acceder a las claves de 64 bits: http://www.rhyous.com/2011/01/24/how-read-the-64-bit -register-from-a-32-bit-application-or-vice-versa /
fuente
REG_EXPAND_SZ
valores. Hay algo de información sobre MSDN - Registry RedirectorEn Visual Studio 2017, vaya a
Project > Properties > Build > Uncheck 32 bit and Platform target as "Any CPU".
fuente