Tengo un conjunto de aplicaciones C# (v2) y estoy luchando con la virtualización del registro en Win7 (y en menor medida en Vista).Detectando la virtualización del registro
Tengo un área de configuración de registro compartida a la que mis aplicaciones deben acceder en HKLM \ Software \ Company ... Antes de Vista, todo lo que se escribía y se leía desde esa ubicación era necesario.
El código detectó correctamente las fallas al escribir en esa clave de registro y se caería de manera adecuada (escribiendo a HKCU y notificando al usuario que la configuración que habían aplicado solo afectaría al usuario actual).
En Vista, la virtualización de registro rompió todo esto porque la verificación de acceso que estábamos utilizando para la escritura HKLM "tendría éxito" silenciosamente y se virtualizaría a HKCR \ VirtualStore \ Machine ... en su lugar. En este caso, el usuario pensaría que ha guardado la configuración de toda la máquina, pero en su lugar solo ha escrito en la tienda virtual.
Lamentablemente, incluso al intentar enumerar los permisos en la clave de registro HKLM, se obtienen resultados que indican explícitamente que el usuario tiene acceso, lo hagan o no.
Cuando agregamos el soporte de Vista, la solución que utilizamos fue realizar una prueba de escritura en HKLM ... y luego verificar en HKCR \ VirtualStore \ Machine ... por el mismo valor y observar que la virtualización había ocurrido si el valor fue encontrado.
Win7 parece haber roto esto (de nuevo) porque las consultas contra la ubicación virtual explícita (HKCR) ahora muestran resultados combinados de la ubicación HKLM incluso si la escritura no se virtualizó.
¿Alguien tiene alguna sugerencia para solucionar este problema?
Restricciones: - Necesito una solución que funcione sin requerir elevación (cuando no tengo permisos de nivel de administrador, recurriré a una configuración por usuario en HKCU, pero debo ser capaz de detectar este caso de manera confiable) .
Se necesita trabajar con una aplicación v2 C# (Una de las opciones que he visto en código C++ es integrar un manifiesto que desactiva la virtualización para el .exe pero no han sido capaces de hacer eso en C# V2 ver disable folder virtualization in windows).
Tiene que funcionar sin un "instalador" (esto imposibilita la capacidad de deshabilitar la virtualización en la clave de registro que necesitamos al comando REG FLAGS ...).
¿Ha intentado utilizar BoxedApp ? Puede ayudar. ¡Buena suerte! –
Debe usar boxedapppacker o boxedapp. Registro de sistema Itemulate para una aplicación. – MastAvalons