none
Manejo del registro de windows

    Pregunta

  • Estimados.

    Bendiciones a todos, he estado investigando este tema a acusa de un proyecto en el cual debo obtener e insertar datos en el registro de Windows en diferentes claves y sub claves, y me encontrado dos maneras por así decirlo la My.Computer.Registry y la Registy del espacio de nombre Microsoft.Win32 y no me que claro cual es la natural de .NET, ósea cual es mejor y no implique que quede obsoleta a corto plazo, no se si logro explicarme.

    Espero me puedan aclarar un poco mas el tema de como acceder al registro de Windows en .NET, yo en vb6 lo hacia con apis. y no quiero usar lo de vb6 en .NET quiero hacerlo completamente con .NET, se podrá.

    Espero sus comentarios, Gracias.

    lunes, 10 de abril de 2017 22:38

Respuestas

  • "Negochile" preguntó:

    > ... me encontrado dos maneras por así decirlo la My.Computer.Registry y la Registy
    > del espacio de nombre Microsoft.Win32 y no me que claro cual es la natural de .NET,
    > ósea cual es mejor y no implique que quede obsoleta a corto plazo, ...

    Hola:

    La clase, digamos "natural" u oficial de .NET, para el acceso y manipulación del Registro de Windows es la clase Registry existente en el espacio de nombres Microsoft.Win32.

    Lo que ocurre es que Visual Basic .NET nos proporciona la propiedad Registry del objeto My.Compute, para acceder al registro de una manera, digamos "más sencilla", ya que dicha propiedad nos devuelve un objeto Microsoft.VisualBasic.MyServices.RegistryProxy el cual internamente trabaja con un objeto Microsoft.Win32.Registry, por tanto, mientras utilices para tus desarrollos el lenguaje Visual Basic .NET da igual que utilices la clase Microsoft.Win32.Registry como la clase Microsoft.VisualBasic.MyServices.RegistryProxy devuelta por el objeto My.Computer.Registry.

    Si el día de mañana tienes pensado utilizar otro lenguaje de programación .NET diferente a Visual Basic .NET, podrías utilizar la clase Microsoft.Win32.Registry para que posteriormente no te tengas que acostumbrar a ella, pero si solamente vas a trabajar con Visual Basic .NET, da exactamente igual que utilices una u otra: con la que más a gusto te encuentres.

    Yo, personalmente prefiero utilizar las clases originales y dejar a un lado las clases "sucedáneas" que nos proporciona el espacio de nombres My de Visual Basic .NET, pero por ahí dicen que para gustos están los colores. :-)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.






    jueves, 13 de abril de 2017 7:51
    Moderador
  • "Negochile" preguntó:

    >  ¿La clase Microsoft.Win32.Registry la Palabra "Win32" hace referencia a
    > 32 bits o eso no se refiere al sistema operativo si es 32 o 64 bits?

    ¡Bueno! La palabra Microsoft.Win32 es el espacio de nombres donde se incluye la clase Registry y otras cuántas más, pero no quiere decir que el nombre "Win32" haga referencia a la arquitectura del sistema operativo, al menos que yo sepa.

    Las clases existentes en el espacio de nombres Microsoft.Win32 digamos que son objetos específicos del propio sistema operativo Windows (como puede ser su registro, los cuadros de diálogo comunes Abrir y Guardar cómo, eventos del sistema, etc.), que sería difícil hacerlos compatibles con los existentes en otros sistemas operativos diferentes, por lo que me imagino que fuera este el motivo para que los ingenieros de la plataforma Microsoft .NET tomaran la decisión de incluirlas en un espacio de nombres diferentes al espacio de nombres System, que es donde prácticamente se incluyen la totalidad de clases existentes en el marco de trabajo de .NET; haciendo alusión al nombre Microsoft y Win32, parece ser que se quiere dar a entender que solamente sirven para el sistema operativo Microsoft Windows, con independencia de la arquitectura con la que éste fue compilado (32 o 64 bits).

    Y lo del número 32, digo yo que será por aquello de las funciones de la API (Interfaz de Programación de Aplicaciones) de 32 bits, que generalmente se le denomina la "API de Win32", pero que se pueden utilizar igualmente en plataformas de 64 bits debido a que existe una versión de 64 bits de las mismas llamada Win64.

    En resumidas cuentas, que mientras utilices la clase Registry existente en el espacio de nombres Microsoft.Win32 para interactuar con el Registro de Windows, no te tienes que preocupar de utilizar la versión de 32 o de 64 bits de una función concreta de la API de Windows, ya que de ello se encargará internamente la propia clase Registry. Pero debes de tener en cuenta que si tu aplicación la compilas explícitamente para 32 bits o 64 bits, se utilizarán las funciones de la API de 32 bits o de 64 bits.

    Esto último es muy importante conocerlo, y más si tu aplicación va a trabajar con el registro de Windows, porque si la compilas para 64 bits, se comprende que esta va a ser ejecutada en plataformas Windows de 64 bits, por tanto, no tendrás problema alguno porque se accederá al árbol del registro normal y corriente de Windows de 64 bits.

    El problema se te puede presentar si compilas tu aplicación expresamente para 32 bits y se ejecuta en plataformas Windows de 64 bits. En este supuesto, tu aplicación (los métodos de la clase Registry) accederá al árbol del registro existente en el subsistema WOW64 (que se localiza en la clave HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node), que digamos es la parte del registro para las aplicaciones Windows de 32 bits que se ejecutan en un sistema operativo de 64 bits. Ello quiere decir que los valores existentes en las claves de este subsistema pueden diferir de los existentes en los mismos nombres de claves correspondientes al árbol del registro normal y corriente de 64 bits. ¿Me he explicado? ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    lunes, 24 de abril de 2017 15:35
    Moderador

Todas las respuestas

  • Hola Negochile

    La documentación oficial de Microsoft, lo basa de esta manera Cómo: Crear una clave del Registro y establecer su valor en Visual Basic , todo es .net, no vb6

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    lunes, 10 de abril de 2017 22:44
  • Brayan, Bendiciones.

    Mira por eso plantea la pregunta por que no tenia claro el tema y una de las cosas "oficiales" respecto a la manipulación del registro de Windows era lo que tu me indicaste,y si te das cuenta en Leer y escribir en el Registro (Visual Basic) explica lo que me dices y la otra forma la del espacio de nombre Microsoft.Win32, entonces cual es mejor cual es natural o propia por ponerle nombre de VB.NET, o .NET, mmm.

    Gracias por tu ayuda y espero estés bien.

    martes, 11 de abril de 2017 1:54
  • "Negochile" preguntó:

    > ... me encontrado dos maneras por así decirlo la My.Computer.Registry y la Registy
    > del espacio de nombre Microsoft.Win32 y no me que claro cual es la natural de .NET,
    > ósea cual es mejor y no implique que quede obsoleta a corto plazo, ...

    Hola:

    La clase, digamos "natural" u oficial de .NET, para el acceso y manipulación del Registro de Windows es la clase Registry existente en el espacio de nombres Microsoft.Win32.

    Lo que ocurre es que Visual Basic .NET nos proporciona la propiedad Registry del objeto My.Compute, para acceder al registro de una manera, digamos "más sencilla", ya que dicha propiedad nos devuelve un objeto Microsoft.VisualBasic.MyServices.RegistryProxy el cual internamente trabaja con un objeto Microsoft.Win32.Registry, por tanto, mientras utilices para tus desarrollos el lenguaje Visual Basic .NET da igual que utilices la clase Microsoft.Win32.Registry como la clase Microsoft.VisualBasic.MyServices.RegistryProxy devuelta por el objeto My.Computer.Registry.

    Si el día de mañana tienes pensado utilizar otro lenguaje de programación .NET diferente a Visual Basic .NET, podrías utilizar la clase Microsoft.Win32.Registry para que posteriormente no te tengas que acostumbrar a ella, pero si solamente vas a trabajar con Visual Basic .NET, da exactamente igual que utilices una u otra: con la que más a gusto te encuentres.

    Yo, personalmente prefiero utilizar las clases originales y dejar a un lado las clases "sucedáneas" que nos proporciona el espacio de nombres My de Visual Basic .NET, pero por ahí dicen que para gustos están los colores. :-)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.






    jueves, 13 de abril de 2017 7:51
    Moderador
  • Enrique Bendiciones.

    extrañaba tu intervención, y si me permites decir como lo expresaste en el ultimo párrafo eso es lo que yo opino, de ahí es que nació la pregunta, por que, en la documentación que leí aparecía el uso de My.Computer.Registry y al final hacia referencia a  Microosft.Win32.Registry y algunos colegas del foro en otros post no clarificaban mucho el asunto.

    Bueno, Agradezco mucho tu aclaración a esto, ya se por donde es mejor ir. Así como bien dices si llegase a cambiar el lenguaje en .NET no me será difícil o enredado implementar la manipulación del registro, si la clase Micorosft.Win32.Registry.

    Pero tengo otra duda, ¿La clase Microsoft.Win32.Registry la Palabra "Win32" hace referencia a 32 bits o eso no se refiere al sistema operativo si es 32 o 64 bits?

    Atte.

    Alfonso Araya R.

    domingo, 23 de abril de 2017 20:58
  • "Negochile" preguntó:

    >  ¿La clase Microsoft.Win32.Registry la Palabra "Win32" hace referencia a
    > 32 bits o eso no se refiere al sistema operativo si es 32 o 64 bits?

    ¡Bueno! La palabra Microsoft.Win32 es el espacio de nombres donde se incluye la clase Registry y otras cuántas más, pero no quiere decir que el nombre "Win32" haga referencia a la arquitectura del sistema operativo, al menos que yo sepa.

    Las clases existentes en el espacio de nombres Microsoft.Win32 digamos que son objetos específicos del propio sistema operativo Windows (como puede ser su registro, los cuadros de diálogo comunes Abrir y Guardar cómo, eventos del sistema, etc.), que sería difícil hacerlos compatibles con los existentes en otros sistemas operativos diferentes, por lo que me imagino que fuera este el motivo para que los ingenieros de la plataforma Microsoft .NET tomaran la decisión de incluirlas en un espacio de nombres diferentes al espacio de nombres System, que es donde prácticamente se incluyen la totalidad de clases existentes en el marco de trabajo de .NET; haciendo alusión al nombre Microsoft y Win32, parece ser que se quiere dar a entender que solamente sirven para el sistema operativo Microsoft Windows, con independencia de la arquitectura con la que éste fue compilado (32 o 64 bits).

    Y lo del número 32, digo yo que será por aquello de las funciones de la API (Interfaz de Programación de Aplicaciones) de 32 bits, que generalmente se le denomina la "API de Win32", pero que se pueden utilizar igualmente en plataformas de 64 bits debido a que existe una versión de 64 bits de las mismas llamada Win64.

    En resumidas cuentas, que mientras utilices la clase Registry existente en el espacio de nombres Microsoft.Win32 para interactuar con el Registro de Windows, no te tienes que preocupar de utilizar la versión de 32 o de 64 bits de una función concreta de la API de Windows, ya que de ello se encargará internamente la propia clase Registry. Pero debes de tener en cuenta que si tu aplicación la compilas explícitamente para 32 bits o 64 bits, se utilizarán las funciones de la API de 32 bits o de 64 bits.

    Esto último es muy importante conocerlo, y más si tu aplicación va a trabajar con el registro de Windows, porque si la compilas para 64 bits, se comprende que esta va a ser ejecutada en plataformas Windows de 64 bits, por tanto, no tendrás problema alguno porque se accederá al árbol del registro normal y corriente de Windows de 64 bits.

    El problema se te puede presentar si compilas tu aplicación expresamente para 32 bits y se ejecuta en plataformas Windows de 64 bits. En este supuesto, tu aplicación (los métodos de la clase Registry) accederá al árbol del registro existente en el subsistema WOW64 (que se localiza en la clave HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node), que digamos es la parte del registro para las aplicaciones Windows de 32 bits que se ejecutan en un sistema operativo de 64 bits. Ello quiere decir que los valores existentes en las claves de este subsistema pueden diferir de los existentes en los mismos nombres de claves correspondientes al árbol del registro normal y corriente de 64 bits. ¿Me he explicado? ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    lunes, 24 de abril de 2017 15:35
    Moderador