BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

Virtualización de archivos de Windows7 en aplicaciones propias.

BocaDePez
BocaDePez

Hola gente.

Tengo un programa que hice hace muchos años, en Visual Basic. ES simple, de calculos, pero me guarda archivos en el directorio de la aplicación.

Con Windows 7 no me funciona. Me dice acceso denegado al guardar. Me he dado cuenta que me los desvía a un Virtual Store dentro de c:/Users, y logicamente en esa carpeta no tengo acceso desde la aplicación. Que se supone que debo hacer por si le paso la aplicación a alguien? En mi caso lo he arreglado rapido autorizandome a escritura en ese directorio de VirtualStore.

He visto que una opción es adjuntar un archivo .manifest desactivando dicho sistema, pero no se porque pero el Windows 7 me ignora los manifest de mi aplicación.

Alguna ayuda?

BocaDePez
BocaDePez

El tema del VirtualStore es una solución introducida en Windows Vista para permitir que aplicaciones que crean/modifican/etc archivos en directorios que requieren permisos (como ocurre con Program Files desde ese sistema operativo) continúen funcionando sin problemas. En principio debería ser totalmente transparente a la aplicación, por lo que es un poco raro el problema que estás teniendo.

Por otro lado Microsoft no recomienda apoyarse en esta funcionalidad, ya que es una solución para compatibilidad únicamente. La recomendación es no hacer cambios en el directorio de la aplicación una vez instalada si ésta se sitúa en un directorio del sistema, creando en su lugar una carpeta especifica para estas tareas en el home del usuario o en el directorio público según las necesidades, es decir, %HOMEPATH%\MyApplication o bien %PUBLIC%\MyApplication por ejemplo.

Saludos.

🗨️ 4
BocaDePez
BocaDePez

Entiendo. En mi caso pues es lo tipico. La aplicación crea temporales que lo que hago es crear un directorio Temp dentro de la propia ruta del programa. Es ahí donde el programa casca con el error: "acceso denegado" ya que la carpeta Temp no aparece en c:\Archivos de programa\... sino en C:\Users\...VirtualStore\... y ahí al parecer me da acceso denegado.

Lo que haré es reprogramar la aplicación entonces para que ponga esos temporales fuera de la aplicación (para mi eso es enguarrar mas ya que estas separando el programa en dos carpetas de dos lugares distintos).

Gracias por la información.

🗨️ 3
BocaDePez
BocaDePez

Pero es que hace años que Microsoft "forzó" el cambio del modelo, para justamente implementar la personalización por usuario: que los ficheros de configuración y/o temporales quedasen en el perfil del usuario, y que otro usuario que pudiese lanzar la aplicación (incluso simultáneamente, manteniendo ambas sesiones abiertas) trabajasen de forma independiente, con valores independientes.

BocaDePez
BocaDePez

Si son temporales puedes usar el del usuario en lugar de crear un directorio dedicado para tu aplicación. En VB.NET tan sencillo como...

Environment.GetEnvironmentVariable("TEMP")

...para obtener el path.

Saludos.

🗨️ 1
BocaDePez
BocaDePez

Eso es lo que uso, pero dentro de TEMP creo un directorio de mi aplicación. Así borro directamente el directorio cada vez que cierro la aplicación y no mezclo los archivos temporales de mi aplicación con toda la "basura" que tenga esa carpeta.

LineBenchmark

¿Ejecutas la aplicación como administrador?

Desarrollalo de nuevo incluyendo permisos desde el propio IDE o mediante un .manifest que eleve permisos, y que puede embeberse si se desea.

🗨️ 2
BocaDePez
BocaDePez

No lo ejecuto como administrador (como tal si funciona) ya que se supone que puede haber gente con usuarios limitados.

Por tanto, creo que la única solucion es utilizar, tal y como apuntaba el compañero, directorios publicos del OS.

🗨️ 1
LineBenchmark

Ajammm, entonces si, en Acceso público si no se quiere que se complique un poco la cosa.

Saludos.