Pregunta

Tengo problemas para comprender la virtualización de la tienda virtual de las operaciones de registro en Vista y/o Windows 7. Pensé que tratar de escribir algo en el HKEY_LOCAL_MACHINE Root mientras se ejecuta como usuario estándar le pediría a Windows que virtualice la operación y escriba a HKEY_CURRENT_USER/CLASSES/VirtualStore/Machine en cambio. He visto que varias aplicaciones más antiguas se comportan exactamente así.

Sin embargo, al intentar replicar ese comportamiento en C# y .net4, la operación de escritura a HKLM simplemente falla con un No autorizado en cambio. ¿Hay alguna forma de forzar la virtualización?

Para dar algún contexto a la pregunta: estoy tratando de leer y manipular claves de registro originalmente creadas por otra aplicación heredada. En Vista o Windows 7, estos se ubicarán en Virtualstore. Me gustaría usar la misma lógica de acceso al registro tanto para WinXP como para arriba y pensé que mis operaciones de registro se virtualizarían de la misma manera que las operaciones de la aplicación heredada (y operarían en las mismas claves, debido a eso). Esto no funciona como se esperaba y la única solución que conozco es acceder específicamente a la ruta de la tienda virtual, Si el usuario está ejecutando Vista o 7 y tiene UAC habilitado... Sin embargo, parece feo, especialmente si Microsoft decide cambiar el comportamiento de virtualización en futuras versiones de Windows.

¿Fue útil?

Solución

El artículo de MSDN Virtualización de registro en Windows Vista explica que ciertas clases de procesos tienen virtualización deshabilitada:

  • Procesos de 64 bits
  • Ejecutables que tienen un SolicedExecutionLevel especificado en el manifiesto
  • y algunos otros; Consulte el artículo para más detalles

Uno o ambos de los dos primeros son típicamente verdaderos para una aplicación .NET (debido al manifiesto predeterminado suministrado por el compilador). Tendría que eliminar el manifiesto (para que su aplicación se vea como una aplicación heredada) para habilitar la virtualización, pero esta sería una mala idea (para la compatibilidad de los avances con Windows). En su lugar, suponga que su aplicación no está virtualizada en Vista (y más tarde) y continúe en consecuencia.

Además, el artículo advierte que "Microsoft tiene la intención de eliminar esta forma de virtualización de las versiones futuras del sistema operativo Windows ... Es imperativo que su aplicación no tenga una dependencia difícil de la presencia de virtualización en el sistema". Cualquiera que sea el código que escriba, debe anticipar que la tecla VirtualStore puede no existir en una versión futura de Windows.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top