2011-08-05 19 views
11

Me preguntaba si era posible acceder a la siguiente clave de registro en C# en una PC de 64 bits.C# Access 64 bit Registro

HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run

Cuando se accede en un PC de 32 bits funciona bien, pero en el 64 que re - dirige a la ruta de 64 bits nativa de HKLM \ SOFTWARE \ Wow6432Node que tiene diferente llaves. He revisado varios artículos sobre esto, pero realmente no puedo encontrar una respuesta definitiva sobre cómo acceder a la clave de 32 bits en una PC de 64 bits en C#. Gracias.

+1

¿A qué versión de .Net están apuntando? – Justin

+0

Estoy usando VS 2010 así que .NET 4 Supongo –

Respuesta

5

Compile su aplicación en x64, y todo debería estar bien. En Visual Studio 2010, que haría que cambiando la configuración en Project Properties > Build

enter image description here

Para los usuarios VS Express:

en VC# Express, esta propiedad no se encuentra, pero todavía se puede cree una configuración x86 si sabe dónde buscar.

Parece una larga lista de pasos, pero una vez que sepa dónde se encuentran estas cosas es mucho más fácil. Cualquier persona que solo tenga VC# Express lo hará , probablemente le resulte útil. Una vez que sepa sobre Configuration Manager, será mucho más intuitivo la próxima vez.

  1. En VC# Express, vaya a Herramientas -> Opciones.
  2. En la esquina inferior izquierda del cuadro de diálogo Opciones, marque la casilla que dice , "Mostrar todas las configuraciones".
  3. En la vista de árbol en el lado izquierdo, seleccione "Proyectos y soluciones ".
  4. En las opciones de la derecha, marque la casilla que dice "Mostrar configuraciones avanzadas de compilación".
  5. Haga clic en Aceptar.
  6. Ir a compilación -> Administrador de configuración ...
  7. En la columna Plataforma junto a su proyecto, haga clic en el cuadro combinado y seleccione "".
  8. En la configuración "Nueva plataforma", elija "x64".
  9. Haga clic en Aceptar.
  10. Haga clic en Cerrar.
  11. ¡Allí, ahora tiene una configuración x64! ¡Muy fácil! :-)
+0

Gracias, ¿es solo para Visual Studio Pro, estoy usando Express y no puedo encontrar esa opción? –

+0

@Bali, he editado mi respuesta con instrucciones que * con suerte * funcionarán, adaptada de http://forums.create.msdn.com/forums/t/4377.aspx#22601. Por favor, adelante y pruébelo :) – foxy

+0

¡Gracias, eso es genial! –

1

Supón que redirige. Necesita detectar esta redirección y leer la clave WoW6432Node en su lugar. HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run es el registro de 64 bits al que solo se puede acceder mediante aplicaciones de 64 bits.

Obviamente deberás escribir código para admitir ambos.

+0

incorrecto, esta es una clave leída por el shell que es 64 bit –

+0

@David - Voy a tener que estar en desacuerdo con su comentario. La redirección a HKLM \ SOFTWARE \ Wow6432Node es desconocida para una aplicación de 32 bits. Si siente que puede agregar una aclaración a mi respuesta, lo agradecería (en lugar de hacer una afirmación infundada de que soy incorrecto). –

+0

Tiene razón en que no estoy seguro. Lo siento. 'HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Run' es una clave sin sentido. El shell lee los valores en 'HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run'. Es posible que lea los valores en el área de 32 bits como un complemento para los programas que lo hacen mal, pero el lugar correcto para escribir los valores en la sección de 64 bits. –

2

Lo tiene al revés, el Wow6432Node es para aplicaciones de 32 bits. Entonces, si su aplicación es de 32 bits (x86), entonces sería automáticamente redirigido a ese "nodo".

Puede usar el método FromHandle en .NET 4 para especificar qué vista usar, pero su uso no es muy obvio y puede haber problems.

Esta answer aborda esta cuestión utilizando la API de Win32, que también puede aprovechar en C#.

13

Si tiene como objetivo .Net Framework versión 4.0 o superior, puede hacerlo pasando el valor RegistryView.Registry32 al abrir la clave de registro deseada.

Si se dirige a una versión anterior de .Net Framework, entonces necesita usar P/Invoke para llamar directamente al RegOpenKeyEx, lo que le permite pasar el indicador KEY_WOW64_32KEY.

Hay una guía aquí donde entra en más detalles:

+0

Brill, vivas !!! –

5

proyecto + Propiedades, pestaña, Destino de la plataforma = Cualquier CPU Construir. Acceder al registro de 64 bits desde una aplicación de 32 bits requiere .NET 4 y el nuevo método RegistryKey.OpenBaseKey() con la opción RegistryView.Registry64.

Esto solo le permite leer la clave, la escritura de los valores clave requiere elevación de UAC. Puede escribir en HKCU sin elevación y sin estar sujeto a una redirección de registro.