Tengo una aplicación que usa un archivo config.xml que se almacena en C: \ ProgramData \ MyApp
El archivo de configuración se crea y edita utilizando MyConfigApp.exe y luego lo lee la aplicación real MyApp.exe.
Durante la instalación, inicié sesión como administrador y todo funcionó a la perfección. Luego iniciamos sesión como usuario normal y funcionó perfectamente aquí también.
Entonces necesitábamos cambiar una configuración. Esto es algo que un usuario debería poder hacer, así que comenzamos MyConfigApp.exe y cambiamos la configuración.
Pero el cambio nunca se leyó en MyApp.exe.
Abrí c: \ ProgramData \ MyApp \ config.xml y los valores anteriores estaban en él.
Ahora descubrimos que el usuario no tenía derechos de escritura en el directorio ProgramData. Entonces Windows creó un nuevo archivo en VirtualStore, que no se usa desde MyApp.exe
Agregamos derechos de escritura en ProgramData (y subdirectorios) y eliminamos el archivo config.xml de VirtualStore.
¡PERO cada vez que el usuario ejecuta MyConfigApp.exe creará un archivo en VirtualStore!
¿Cómo hago para que MyConfigApp.exe lea y escriba el archivo en ProgramData?
fuente
Respuestas:
Resolví esto con mi aplicación heredada creando un
.manifest
archivo, que se coloca junto al exe. No hay problemas reales, solo un archivo de texto llamadoMyConfigApp.exe.manifest
que contiene algo como el código XML a continuación.Según Microsoft, (consulte https://msdn.microsoft.com/en-us/library/bb756929.aspx ) un EXE con un archivo de manifiesto lado a lado como el siguiente no participará en la virtualización del sistema de archivos porque se solicita un nivel de ejecución específico y, por lo tanto, no agregará cosas a VirtualStore de un usuario.
Sin embargo, tenga en cuenta que el sistema va a utilizar VirtualStore si hay archivos que ya existen. Aquí está el código manifiesto:
fuente