Obtener Valor de De Registro

Iniciado por rigorvzla, 27 Octubre 2019, 18:08 PM

0 Miembros y 1 Visitante están viendo este tema.

rigorvzla

Hola a todos, estoy por aqui hoy por lo siguiente, eh intentado de muchisimas maneras y probado cuanto codigo en internet eh encontrado pero no doy con la solucion, necesito obtener los valores de la siguiente llave, pero siempre me regresa null y no entiendo el porque, ya que eh probado con tras llaves de registro y si me da el valor que tiene.

Anexo el codigo q ocupo para ver quien puede ayudarme con este problema.

   Microsoft.Win32.RegistryKey rkey;
            rkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\OEMInformation");
            if (rkey == null)
            {
                Console.WriteLine("no");
            }
            else
            {
                string myTestKey = (string)rkey.GetValue("Model");
                Console.WriteLine(myTestKey);
            }


Gracias de antemano

Serapis

Antes de abrir una clave, que tal si primero compruebas si existe?... Si no, estás cazando gamusinos.

rigorvzla

jeje gamusinos, si existe yo revise el registro y ahi esta, incluso hice pruebas con el mismo codigo en otras keys y resulta, pero ese, los datos como q son fantasmas por que desde el registro se ve y esta, pero desde el codigo no da el valor del codigo .

Serapis

Si has verificado que existe (entiendo que en tu equipo puedas abrir el 'regedit' y buscarlo, pero al verificar lo que quiero decir es que puedes listarlo por código y aparece, porque no vas a ir al equipo del cliente a mirar su regedit, no?), lo siguiente que procede es saber si tienes permisos para acceder a dicha clave.

Nuevamente si es en tu equipo, puedes simplemente abrir el regedit pinchas en la clave con el otro botón y tomar permisos para el usuario (si el usuario tiene un mínimo de privilegios), si solo vas a leeerlos basta el permiso 'read', si tienes que ahcer modificaciones, etc.. el 'full control'.

...y nuevamente (esto ya es mala costumbre), para información específica, ningún sitio mejor que la propia documentación del propio fabricante/proveedor del software... (cualquier explicación dada por terceros nunca será exhaustiva, porque a nadie le apetece repetir lo que ya viene explicado en otras partes, solo porque al que pregunta le dé pereza buscar la info donde procede).
https://docs.microsoft.com/en-us/windows/win32/sysinfo/registry-key-security-and-access-rights
En dicha página a su derecha aparece el árbol de temas sobre el registro, tómate el tiempo necesario para leer... es preferible documentarse bien que andar preguntando contínuamente, como es preferible tejer telas nuevas que zurcir trozos viejos y rotos para unirlos.

...programar a golpe de preguntas, es tedioso lento y sujeto a mala praxis de programación (básicamente supone que por falta de conocimientos se va improvisando sobre la marcha).

rigorvzla

Gracias por tu respuesta nebire, de todos modos el codigo que te eh mostrado aqui se los dejo mas ordenado.

private static string ReadKey(string registro, string keyName)
        {
            Microsoft.Win32.RegistryKey rkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(registro);
            if (rkey == null)
            {
                Console.WriteLine("no");
            }
            else
            {
                keyName = (string)rkey.GetValue(keyName);
            }
            return keyName;
        }


uso:
            Console.WriteLine(ReadKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\OEMInformation\\", "Model"));


yo lo uso para ver cualquier otra llave del registro y me da la informacion sin problemas , no entiendo por que justamente esta llavo NO me muestra los datos.

Si alguien mas puede ayudarme se lo agradeceria mucho.

rigorvzla

Hola de nuevo a migos, eh conseguido la solucion, tal cual el codigo como esta, funciona.

Pero mi equipo es de 64Bits asi q con la funcion "Any CPU" no funciona, lo que hice fue cambiar la compilacion a 64Bits y tadan! sirvio.! imagino que en caso de tratarce de 32bits debera compilarse en 86x , Gracias de todos modos , hasta una nueva inquietud.