Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-08-2006
Mona Mona is offline
Registrado
 
Registrado: jun 2006
Posts: 8
Poder: 0
Mona Va por buen camino
Buscar una aplicación existente, realizando el instalador con Inno Setup

Hola, buenos días, la verdad es la segunda vez que entro a este foro. Espero que me puedan ayudar a visualizar una solución a lo que debo hacer.

Debo realizar el instalador de una aplicación con Inno Setup, he leído y se como instalar interbase, pero tengo que verificar lo siguiente:

El nuevo aplicativo que deseo instalar esta hecho en dbexpress con motor Interbase, si en la máquina donde se vaya a instalar el aplicativo ya existe el aplicativo (es decir hay una versión anterior, la versión anterior fué hecha con bde), solo debo instalar el ejecutable y un archivo .ini que contiene los script de actualización, en caso contrario instala los dll, la base de datos, el ejecutable y interbase como si fuera la primera vez.
Pensé en hacerlo, verificando si en el registro de windows estaba INTERBASE, pero puedo suceder que en la máquina donde se instale esten trabajando un aplicativo diferente al que estoy instalando.

Espero haber sido clara en la explicación de lo que deseo hacer. Cualquier ayuda que me puedan brindar, les quedo inmensamente agradecida.
Responder Con Cita
  #2  
Antiguo 10-08-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.586
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Para comprobar tu aplicación (versión anterior) puedes comprobar el número de versión de la que hay instalada. Si no lo habéis utilizado te tendrás que valer de la fecha del ejecutable; Debes saber a partir de qué versión o qué fecha de bvuestro ejecutable cambiásteis de BDE a Interbase.

Para el tema de que no esté la aplicación y quieras comprobar si ya existe Interbase o no, creo reciordar que puedes buscar si está el Servicio instalado (IBServer o IBGuard -no recuerdo-); Si todo esto no puedes hacerlo desde Inno Setup o te da problema siempre puedes programarlo en una Aplicación Delphi que se lance desde el Inno en la istalación.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 10-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Hola Mona:

Mas o menos ando el mismo caso, aunque InnoSetup tiene su sección Code para crear tus propias rutinas, es algo engorroso traducir las apis, para eso estoy usando la opción comentada por Neftali, hacer una aplicación aparte que se distribuye con el Setup, se guarda en la carpeta "tmp" del equipo y despues se ejecute, si necesitas más info, puedo ayudarte con ejemplos.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 10-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Yo en casos como el que comentas lo que hacía (y puede que no sea mala costumbre) es que desde el principio, desde la primera instalación, creaba una clave en el Registro de Windows con la versión (y lo que se te ocurra) de la aplicación que estaba instalándose.

Claro que esto a ti no te servirá ya de mucho, puesto que lo que digo es que de ese modo, haciéndolo así, es trivial con el InnoSetup comprobar si una determinada clave del Registro de Windows existe. De todos modos, aunque no dejaras algo "preparado" de antemano, tal vez podrías utilizar alguna otra clave del Registro, en caso de que tu aplicación guarde "cosas" ahí.

Por otro lado, creo recordar que InnoSetup permite "incrustar" código de Object Pascal en el instalador, o sea, no todo pero sí un subconjunto de funciones y eso. Tal vez, si no te queda más remedio, podrías tratar de buscar, directamente, el ejecutable de tu aplicación. Esto ralentizaría la instalación del programa, pero, a lo mejor se puede hacer algo para evitar que fuera eterno.

Me refiero a que acaso no tengas que buscar en todo el disco duro, sino, sólo en determinadas rutas. Y, por otro lado, en este tu segundo instalador, no te olvides de incluir ya una "marca" en el Registro de Windows, de modo que desde un tercer instalador de tu programa pudieras comprobar si dicha marca existe o no.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 10-08-2006
Mona Mona is offline
Registrado
 
Registrado: jun 2006
Posts: 8
Poder: 0
Mona Va por buen camino
Gracias a todos por las respuestas.

Neftali: Como puedo comprobar la versión anterior del ejecutable, no recuerdo en este momento como hacerlo?. No puedo con la versión del ejecutable, porque este es un aplicativo que se instaló en diferentes equipos de diferentes entidades, mi función fue actualizar este aplicativo a dbexpress y adicionarle funciones nuevas al mismo de acuerdo a la solicitud del cliente.
Leí en el foro, que puedo comprobar el registro en windows de interbase, pero igualmente no me serviría como validador de que el ejecutable ya exista, porque si algún cliente en donde se vaya a instalar este aplicativo, tiene otro aplicativo que también utilice el motor interbase, no podría asumir que si existe interbase quiere decir que el aplicativo anterior se encuentra instalado.

Lepe: Me gustaría me ayudaras con los ejemplos para tratar de implementarlo por la opción que me sugieres.

David: Es cierto lo que dices, como me encargué de hacer la migración a dbexpress, la primera persona que hizo las versiones anteriores no tuvo en cuenta el registro de windows. Con la propuesta que me indicas de buscar en rutas determinadas, no me serviría, porque el aplicativo lo instala la entidad respectiva en cualquier ruta y nombre de directorio que la entidad estime. Sería poder buscar en todo el disco duro, el nombre de la aplicación.
Responder Con Cita
  #6  
Antiguo 11-08-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.586
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
A ver, si no he entendido mal, la situación es esta:

Código:
ComprobarVersionEjecutable                      (1)
si (VersionAntiguaEjecutable) entonces
  CopiarEjecutable
  CopiarFicheroINI
sino
  ComprobarSiInstaladoInterbase                (2)
  si not (InstaladoInterbase) entonces
    InstalaInterbase                                  
  fin
  CopiarEjecutable
  CopiarBaseDatos
fin
(Acabo de recordar mis tiempos de pseudocódigo en la facultad...)

(1) Para comprobar la versión del EXE tienes dos posibilidades:
(a) Que en el ejecutable esté la información de versión; Si está la info de version puedes acceder a ella con GetFileVersionInfo; Revisa el truco 31, que hay en la sección de trucos.
(b) Si el ejecutable no tiene info de versión deberás hacerlo por fecha; Para acceder a las fechas de un fichero puedes ver el truco 72 en la seccion de trucos.

NOTA: Para saber si un EXE tiene esa información, puedes acceder a las propiedades desde el explorador de Windows. Prueba con unos cuantos ejecutrables de tu máquina y verás que en algunos esa información está rellenada y en otros no.

(2) Saber si InterBase está instalado:
Puedes comprobar las siguientes claves del registro, que son justo las qwue se crean cuando se instala Interbase desde un Inno Setup (el instalador de Interbase debe hacer lo mismo).

[Registry]
Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: InterBaseGuardian; ValueData: {app}\bin\ibguard.exe; Flags: uninsdeletekey
Root: HKLM; Subkey: Software\Borland\InterBase\CurrentVersion; ValueType: string; ValueName: DefaultMode; ValueData: -r
Root: HKLM; Subkey: Software\Borland\InterBase\CurrentVersion; ValueType: string; ValueName: GuardianOptions; ValueData: 1
Root: HKLM; Subkey: Software\Borland\InterBase\CurrentVersion; ValueType: string; ValueName: ServerDirectory; ValueData: {app}\bin


Espero que te sirva.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 11-08-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.586
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Mona
G...no tuvo en cuenta el registro de windows...
...el aplicativo lo instala la entidad respectiva en cualquier ruta y nombre de directorio que la entidad estime. Sería poder buscar en todo el disco duro, el nombre de la aplicación.
(1) Par buscar en todo el disco, que parece que es la única alternativa, puedes usar el truco 82 (como ves tenemos trucos para todo...).

(2) Otra opción (o mejor, programarla como alternativa a la anterior) es ofrecer al usuario en la instalación la opción de seleccionar el directorio de instalación anterior; Si realmente cada entidad lo instala en un directorio, allí deben saber en cual.

Algo así:

(1) Seleccione el directorio de instalación anterior.
(2) El programa buscará el directorio por usted (este proceso puede tardar unos minutos).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 11-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Estoy echando un vistazo a la ayuda del programa y existen un conjunto de funciones "para archivos" que pueden utilizarse directamente (en el bloque "CODE") del Script de instalación.

Para lo que nos ocupa creo que podrían servir las siguientes funciones (documentadas en la ayuda del programa, como digo).

Código Delphi [-]
function FileSearch(const Name, DirList: string): String;
function FindFirst(const FileName: String; var FindRec: TFindRec): Boolean;
function FindNext(var FindRec: TFindRec): Boolean;
procedure FindClose(var FindRec: TFindRec);
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 12-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Usarás la utilidad IsTool ¿verdad?, así espero por tu comodidad

Pues ejemplo práctico:

Creo el instalador de un programa, y añado un archivo "NTDETECT.COM" tú tambien lo tendrás en c:\ así que puedes compilar el ejemplo que pongo.

Lo que hago es lo siguiente:
- Añado el archivo ntdetect y le digo que el directorio de destino es el TMP de la máquina de destino.
- En el apartado de instalar, lo mando a ejecutar con el parámetro /silent (en este caso no tiene sentido, pero bueno, es un ejemplo.
-Acabada la instalación, se borra el archivo ntdetect.com del directorio TMP el tuyo que existe en c:\ no se toca .

Además uso un "check", es decir, si se cumple una condición (en este caso si existe el "autoexec.bat") se copia el archivo .COM al directorio TMP y despues se intenta ejecutar. Si el archivo autoexec.bat no existe, no se hace nada de lo mencionado.

Los apartados "interesantes" son Files, Run y code.

Código:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVerName "My Program 1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.mycompany.com"
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\My Program Directory
DefaultGroupName={#MyAppName}
OutputDir=C:\temp
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: english; MessagesFile: compiler:Default.isl
Name: spanish; MessagesFile: compiler:Languages\Spanish.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: C:\Archivos de programa\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\NTDETECT.COM; DestDir: {tmp}; Check: Instalarntdetect; Flags: deleteafterinstall
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {userdesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon

[Run]
Filename: {tmp}\NTDETECT.COM; Parameters: " /silent"; WorkingDir: {tmp}; Flags: waituntilidle; Check: INSTALARNTDETECT

[ Code ]
{Todas las funciones funciones que se usan en un "check" deben ser
funciones que devuelvan un Boolean}

function INSTALARNTDETECT:Boolean;
begin
  {la comprobación que hago es insulsa, pero
   creo que se entenderá el uso}
  Result := fileExists('c:\autoexec.bat')
end;
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 12-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Te aconsejo que en lugar de añadir todo esto:
Código:
ComprobarVersionEjecutable                      (1)
si (VersionAntiguaEjecutable) entonces
  CopiarEjecutable
  CopiarFicheroINI
sino
  ComprobarSiInstaladoInterbase                (2)
  si not (InstaladoInterbase) entonces
    InstalaInterbase                                  
  fin
  CopiarEjecutable
  CopiarBaseDatos
fin
en el apartado de code, lo hagas mediantes Checks, son mucho más cómodos. Me explico mejor:

Código:
Source: C:\Archivos de programa\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: replacesameversion overwritereadonly
Source: C:\NTDETECT.COM; DestDir: {tmp}  Check: CopiarSiesNuevo and EjecutarNtDetect
Source: C:\MiArchio.Ini; DestDir: {app}; Flags: onlyifdoesntexist
Con eso estoy diciendo que MyProg.Exe, se copiará si la versión es igual o mayor que el que exista, además si el MyProg.exe que ya existe en el equipo de destino tiene el atributo de solo lectura, que InnoSetup se lo quite.

El archivo ntdetect.com se copiará si las dos rutinas que se añade en la sección code devuelven true ( CopiarSiesNuevo y EjecutarNtDetect).

El archivo .Ini solo se copia si no existe previamente, así no machacas las opciones que ya tenga definido el usuario.

Como ves, todas las opciones que tiene IsTools son muy muy prácticas y útiles.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 31-08-2006
Mona Mona is offline
Registrado
 
Registrado: jun 2006
Posts: 8
Poder: 0
Mona Va por buen camino
Hola, primero quiero disculparme, me ordenaron suspender lo que estaba haciendo para terminar un proyecto, y por eso hasta ahora puedo entrar a probar lo que me dicen aquí.

Les cuento que hice lo que escribieron y me saca el siguiente error, como NDETECT.COM no lo tengo en mi maquina hice la prueba con otro archivo y me dice:

Ocurrió un error al tratar de crear un archivo en la carpeta destino
"c:\DOCUME~1\Mona\LOCALS~1\Temp\is-E29T4.tmp Check: CopiarSiesNuevo and EjecutarNtDetect"
Error 267: The directory name is invalid
Haga clic sobre Reintentar para probar de nuevo, Ignorar para omitir este archivo (no recomendado) o Cancelar para interrumpir la instalación.

Probé con todas las opciones, y cuando le doy ignorar, me dice
"c:\DOCUME~1\Mona\LOCALS~1\Temp\is-E29T4.tmp\Ejemplo2.xml
CreateProcess falló; código 2
The system cannot find the file specified

Copié el ejemplo tal como aparece en el foro. En donde estoy cometiendo el error??
Responder Con Cita
  #12  
Antiguo 19-02-2013
teecweb teecweb is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 64
Poder: 12
teecweb Va por buen camino
como hacer busqueda en todo mi disco duro las versiones del sistema con INNOSETUP

hola......

Última edición por Casimiro Notevi fecha: 19-02-2013 a las 17:26:15.
Responder Con Cita
  #13  
Antiguo 19-02-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.264
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración
Cita:
Empezado por teecweb Ver Mensaje
gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
inno setup 5 Cosgaya Varios 0 10-01-2006 14:09:38
Inno Setup Ini? marceloalegre Varios 2 07-12-2005 21:49:17
¿Cómo conecto las tablas de paradox para crear un instalador con Inno Setup?? nuri Varios 4 08-08-2005 19:56:36
Inno Setup tarco35 Varios 0 09-04-2005 17:48:01
Inno Setup Icono del instalador Descendents Varios 0 12-11-2003 14:39:59


La franja horaria es GMT +2. Ahora son las 20:00:15.


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
Copyright 1996-2007 Club Delphi