Saltar a contenido


Foto

Problemas con un instalador de programa


  • Debes iniciar sesión para poder participar
3 respuestas en este hilo

#1 Chaos_Hedgehog

Chaos_Hedgehog
  • Reikainiano
  • 589 mensajes

Publicado 07 May 2012 - 02:17 PM

Bueno gente, a ver si por aquí hay alguien que me pueda echar una mano.

Me he montado una aplicación para gestionar los productos de una tienda, con la intención de controlar las fechas de caducidad. La aplicación funciona perfectamente, sin dar problemas de ningún tipo. El problema radica en el instalador que he construido para esa aplicación.

Resulta que la aplicación tiene que toquetear constantemente una base de datos, la cuál incluyo con el programa en el instalador. Pero cuando instalo el programa y hago pruebas con la aplicación fuera del entorno de desarrollo, me salta un mensaje de error diciéndome que 'No se pudo actualizar la base de datos "[ruta donde está la base de datos]" porque es de solo lectura.'.

El caso es que estoy mirando en la aplicación que he usado para crear el instalador, y no veo nada que pueda ayudarme con el tema. La aplicación la he codificado en Visual Basic 2008 Express, y el instalador lo he creado usando el Bitrock Install Builder.

¿Alguno tiene idea de como puedo arreglar esto?
Imagen subida

#2 xose

xose

    Administrator

  • Administradores
  • 7701 mensajes

Publicado 07 May 2012 - 06:23 PM

Probablemente estés instalando en Archivos de Programa. Esa carpeta es de sólo lectura. Si la base de datos se instala junto al programa, no podrá escribir en ella.

No deberías suponer que el usuario va a instalarlo en una carpeta en la que se pueda escribir, así que te recomiendo que utilces una subcarpeta en %APPDATA% para almacenar los archivos con los que va a trabajar de tu programa. Esta carpeta siempre tiene permisos de escritura y es donde los programas deben guardar sus archivos de datos. La ubicación de esta carpeta varía según el sistema operativo, así que tienes que usar una función del sistema para obtener el nombre correcto. Desde Visual Basic puedes hacerlo así:

archivoDatos = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\nombreaplicacion\datos.db"

Para abrir esta carpeta en el explorador de archivos de Windows, escribe %APPDATA% en la barra de direcciones, en Inicio->Ejecutar, o en el cuadro de búsqueda del menú inicio de Windows 7/Vista.

Información sobre GetFolderPath: http://msdn.microsof... ... rpath.aspx
Otros directorios que tienes disponibles con esa función: http://msdn.microsof... ... older.aspx

Reikai-firma.gif


#3 Chaos_Hedgehog

Chaos_Hedgehog
  • Reikainiano
  • 589 mensajes

Publicado 09 May 2012 - 12:10 PM

Bueno, acabo de meter los archivos de la base de datos para que, durante la instalación, los meta en la carpeta AppData\Roaming, pero ahora me suelta otro mensaje de error diferente:

"Error al intentar adjuntar una base de datos nombrada automáticamente para el archivo C.\:Program Files\[carpeta de la aplicacion]\[archivo de la BD]. Ya existe una base de datos con el mismo nombre, no se puede abrir el archivo especificado o se encuentra en un recurso compartido UNC".

Por el momento, voy a probar a poner el ejecutable en la misma carpeta que la BD, ya que creo que intenta buscarla en ese mismo directorio. A ver si ahora consigo que funcione sin problemas.

EDIT: Era lo que me temía, que buscaba la base de datos en la misma carpeta donde está el ejecutable (y claro, ahora no está ahí). Ha bastado con meter el ejecutable en la carpeta AppData\Roaming, junto con los archivos de la BD (si, lo sé, solución cutre donde las haya, pero ha funcionado).
Imagen subida

#4 xose

xose

    Administrator

  • Administradores
  • 7701 mensajes

Publicado 09 May 2012 - 01:57 PM

Tiene que haber alguna forma de elegir el nombre y la ubicación de la base de datos. No sé que base de datos o librería utilizas, pero comprueba la función con la que inicializas la base de datos a ver si admite un path.

Reikai-firma.gif





0 usuario(s) está(n) leyendo este hilo

0 miembros, 0 visitantes, 0 usuarios anónimos