Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Deployment Manager para Windows. Remote Path (https://www.clubdelphi.com/foros/showthread.php?t=96544)

JosepMLlort 19-12-2023 10:23:06

Deployment Manager para Windows. Remote Path
 
Hola.
He hecho una aplicación para windows que utiliza información de una base de datos mdb y estoy intentado publicarla en Microsoft Store. Si incluyo el fichero mdb en el directorio del programa, tras ser instalado en Program Files no se puede leer la base de datos (si se instala en un directorio normal sí se puede, pero los de Microsoft lo instalan en Program Files). Esto ocurre porque esta carpeta està protegida contra escritura.
He probado que el acceso a la base de datos sea de sólo lectura, pero sigue sin poder leerla.

En teoría, el Deployment Manager (menú Project) permite especificar una ruta remota (remote path) para el fichero mdb. Lo ideal sería c:\ProgramData\MiAplicación\, pero cuando introduzco esta ruta en Remote Path, simplemente la añade a la del directorio del programa y queda c:\ProgramFiles\MiAplicación\c:\ProgramData\MiAplicación, lo cual falla.

No he encontrado en ningún sitio documentación detallada sobre como introducir un remote path como el que necesito para Windows. Alguien sabe como hacerlo?

Gracias anticipadas.

JosepMLlort 22-02-2024 10:31:51

Mi solución
 
Hola.

He descubierto una solución. La comparto por si es útil a alguien más.

Microsoft Store no guarda los programas en ProgramFiles, sino en el directorio WindowsApps. Este directorio es de los más protegidos del sistema; es muy difícil escribir o modificar nada en él, y no es conveniente. Los datos, ficheros temporales, etc deben guardarse en un directorio específico de ProgramData, el cual es fácilmente accesible.

No he encontrado la manera de que el Deployment Manager de Delphi copie ficheros en ProgramData, pero he encontrado esta alternativa:
1. Con el Deployment Manager, instalo el fichero mdb (y cualquier otro fichero que deba escribirse durante la ejecución del programa) en el directorio del programa.
2. En el FormCreate de la primera ventana que se abre en el programa, leo el directorio del programa con ExtractFilePath(ParamStr(0)). Ojo: GetDir no funciona aquí.
3. Compruebo si existe el directorio c:\ProgramData\MiAplicacion (DirectoryExists). Si no existe, lo creo con ForceDirectories(c:\ProgramData\MiAplicacion)
4. Copio en este directorio (con CopyFile) el fichero mdb y los demás que deban escribirse durante la ejecución.
5. Leo y escribo estos ficheros en el directorio que he creado en ProgramData. Me olvido del original que está en el directorio del programa.

Y ya he conseguido que el programa funcione. Lo han aceptado y publicado en Microsoft Store!


La franja horaria es GMT +2. Ahora son las 22:49:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi