2012-06-06 11 views
5

Tengo SQL Server instalado.OpenSubKey no funciona para el valor de Registro Necesito

En el registro, la clave MSSQLServer en * HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft * se parece a esto: enter image description here

Todas las siguientes líneas de valores de retorno código del registro:

var mainKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("MSSQLServer"); 
    var subKey1 = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("MSSQLServer").OpenSubKey("Client"); 
    var subKey2 = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("MSSQLServer").OpenSubKey("MSSQLServer").OpenSubKey("CurrentVersion"); 

Sin embargo, este no:

var subKey3 = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("MSSQLServer").OpenSubKey("Setup"); 

"Configuración" lo Oks para ser el mismo tipo de valor que las otras claves. ¿Alguna idea de por qué este comando devuelve nulo?

+0

¿Tiene los permisos necesarios para leer esa clave? Me refiero a la aplicación que ejecuta el código. Intenta ejecutar como administrador y ver si se abre –

Respuesta

10

Su aplicación es de 32 bits y esa es una clave de registro de 64 bits. Las aplicaciones de 32 bits y 64 bits tienen diferentes vistas del registro. En regedit, la clave que está obteniendo en el código es HKLM \ Software \ Wow6432Node \ MSSQLServer, no HKLM \ Software \ MSSQLServer (en su imagen).

Desafortunadamente, el API administrado para acceder a claves de registro no permite que una aplicación de 32 bits obtenga una vista de 64 bits del registro.

Existen dos opciones: Cambiar su aplicación para apuntar a AnyCPU o x64 o P/Invoke la API no administrada. This tiene un ejemplo de cómo hacer la documentación de P/Invoke y MSDN.

Por cierto, puede pasar un camino al método OpenSubKey en lugar de encadenarlos juntos de esa manera.

Actualización: No he estado del todo bien arriba. A partir de .NET 4, se puede usar el método OpenBaseKey (MSDN) para obtener una vista de 64 bits en una aplicación de 32 bits.

Cuestiones relacionadas