Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como generar instalación (https://www.clubdelphi.com/foros/showthread.php?t=47766)

vroa74 06-09-2007 17:16:17

como generar instalación
 
Hola:

me gustaria hacer un instalador de un programa que elabore, no he hechoa hasta el momento ningun intalados asi que no se como iniciar.

Delphi tiene instalado los siguientes componentes que uso.
mydac, reportbuilder, jvcl, imdbimage. los cuales uso en el sistema.

no se si alguien pueda ayudarme a hacer el instalador.
ya instale el insheld install que viene en delphi.

de antemano agradesco por su ayuda.

dec 06-09-2007 17:23:13

Hola,

No es por jorobar (todo lo contrario), pero, si comienzas en estos asuntos, tal vez te interese conocer el programa InnoSetup, que, a diferencia de Install Shield es de código abierto, y casi tan popular y utilizado como este. Además está hecho en Delphi y cuenta con una buena comunidad de usuarios que mantienen herramientas relacionadas, plugins, código, etc. Echa un vistazo por lo menos: InnoSetup, de Jordan Russell.

dajaji 06-09-2007 17:55:40

el maaaas sencillo que encontre, es el CreateInstall Free
viene en varios idiomas
permite meter datos al registro
permite el registro de fuentes utilizadas
y otras cositas mas

y ademas es muy intuitivo

http://www.gentee.com/cifree/

No se olviden como un servidor, ni bien entren al programa seleccionen el idioma español.

suerte

vroa74 06-09-2007 18:49:29

Hola
le agradesco a dec dajaji por haberme contestado.
muchas gracias, voy a rebizar ambos programas.

martinzcr 06-09-2007 19:03:12

Yo tambien uso InnoSetup, junto con ISTool. He probado otros pero este es muy configurable y fácil de usar.

Saludos!

Io 06-09-2007 19:05:36

Yo he empezado hace muy poquito con la elaboración de un instalador. Me decante por innosetup , y ya he creado un instalador, en el que he incluido la instalación automática de Fb15 con la aplicación. A mi parecer en un primer momento parece difícil, pero cuando lo entiendes, te das cuenta que puedes hacer de todo.

Saludos

mantrax 06-09-2007 21:12:43

Sirve para crear actualizaciones automaticas?
 
Supongase que tengo un sistema de escritorio para caja en una cadena de tiendas. ¿hay alguna aplicación que cuando tenga una nueva versión del sistema sea capaz de actualizarla solita en cada máquina que se encuentre instalada? algo tan simple como descargar el ejecutable y pegarlo en un directorio.

¿Cual de ellos realiza esa operación?

vroa74 06-09-2007 21:55:55

Si es lo que tato de hace ya baje los pogamas que mencionaon mas aun no entiendo como se hace el instalado
estoy instalando una maquina vitual para pode hacer pruebas.

como le comente soy novato.

dec 06-09-2007 22:02:43

Hola,

Tienes que empezar por el principio. Por lo que has comentado antes, no necesitarás distribuir con tu programa ninguna librería ni programa "externo", de modo que el asunto puede resumirse en copiar los archivos que conformen tu programa en el sistema de destino, es decir, donde se instale tu programa.

Pero has de empezar por el principio. Si descargaste InnoSetup verás que con él vienen unos cuantos ejemplos. Revísalos y ve tanteando el asunto. No es complicado, pero, en todo caso cuentas con dichos ejemplos y con una ayuda que incorpora el programa la mar de bien hecha.

Cuando te surgan problemas concretos coméntalos por aquí (o en otro hilo si quieres), pero, hasta entonces... creo que has de empezar tú mismo poco a poco. :)

mantrax 06-09-2007 22:15:07

Tu consejo no me quita la interrogante
 
Cita:

Empezado por dec (Mensaje 229014)
Hola,

Tienes que empezar por el principio. Por lo que has comentado antes, no necesitarás distribuir con tu programa ninguna librería ni programa "externo", de modo que el asunto puede resumirse en copiar los archivos que conformen tu programa en el sistema de destino, es decir, donde se instale tu programa.

Pero has de empezar por el principio. Si descargaste InnoSetup verás que con él vienen unos cuantos ejemplos. Revísalos y ve tanteando el asunto. No es complicado, pero, en todo caso cuentas con dichos ejemplos y con una ayuda que incorpora el programa la mar de bien hecha.

Cuando te surgan problemas concretos coméntalos por aquí (o en otro hilo si quieres), pero, hasta entonces... creo que has de empezar tú mismo poco a poco. :)

Gracias por tu colaboracion Al final no entendí lo que quieres decir ¿quieres decir que el innosetup si hace lo que yo necesito pero debo descargarlo y aprenderlo? ¿Los demos que me mencionan realizan una tarea similar a la que expuse?

Io 06-09-2007 22:24:57

Cita:

Supongase que tengo un sistema de escritorio para caja en una cadena de tiendas. ¿hay alguna aplicación que cuando tenga una nueva versión del sistema sea capaz de actualizarla solita en cada máquina que se encuentre instalada? algo tan simple como descargar el ejecutable y pegarlo en un directorio.
Creo que he hecho algo parecido.

Con innosetup, he realizado un actualizador, el cual reemplaza el ejecutable de la aplicación instalada, y actualiza la base de datos si hace falta, sólo con descargarlo y ejecutarlo.


Todo con innosetup :p

Io 06-09-2007 22:27:18

Creo que no era lo que preguntabas...:(

dec 06-09-2007 22:36:07

Hola,

Cita:

Empezado por mantrax
Gracias por tu colaboracion Al final no entendí lo que quieres decir ¿quieres decir que el innosetup si hace lo que yo necesito pero debo descargarlo y aprenderlo? ¿Los demos que me mencionan realizan una tarea similar a la que expuse?
Editar/Borrar Mensaje

Perdona, pero, yo estaba respondiendo al compañero que inició este hilo: ni siquiera había visto tu mensaje.

mantrax 06-09-2007 22:39:33

Lo que quiero que se descargue y actualice es mi aplicacion
 
Quiero un programa que chequee en el servidor si hay una nueva version de mi sistema.
Si la hay la descarga y la instale. El proceso seria simplemente bajar del servidor la nueva version y copiarla en el cliente solito.

dec 06-09-2007 22:51:36

Hola,

Pues ignoro si InnoSetup incorpora algo como lo que necesitas. Lo que puedes hacer en todo caso es preparar tú mismo (en Delphi, si es que se trata de Delphi) el asunto. Es más... yo diría que InnoSetup no incorpora algo así, pero, quién sabe... quizás buscando un poco...

Lo que sí puedes es buscar en estos Foros, puesto que el tema de cómo actualizar un programa se ha tratado en varias ocasiones, a veces llegando a interesantes debates entorno a ello.

Dado de baja 07-09-2007 01:50:57

Cita:

Empezado por Io (Mensaje 228925)
Yo he empezado hace muy poquito con la elaboración de un instalador. Me decante por innosetup , y ya he creado un instalador, en el que he incluido la instalación automática de Fb15 con la aplicación. A mi parecer en un primer momento parece difícil, pero cuando lo entiendes, te das cuenta que puedes hacer de todo.

Hola IO, yo uso innosetup con ISTool y estoy contentiiiisimo, pero no se como hacer lo que tu dices de la instalación automática de fb (en mi caso interbase).

también me interesa mucho saber como has logrado lo del actualizador que actualiza también la db.

¿ alguna pista ?

Dado de baja 07-09-2007 01:57:55

Cita:

Empezado por mantrax (Mensaje 228987)
Supongase que tengo un sistema de escritorio para caja en una cadena de tiendas. ¿hay alguna aplicación que cuando tenga una nueva versión del sistema sea capaz de actualizarla solita en cada máquina que se encuentre instalada? algo tan simple como descargar el ejecutable y pegarlo en un directorio.

¿Cual de ellos realiza esa operación?

Hace algún tiempo hice algo parecido, pero no programé ni una linea de código.
Usé un sistema de sincronización de FTP. Cada tienda tenía un pequeño servidor de FTP.

Al crear una versión nueva, la ponía en una carpeta, lanzaba el sincronizador, y en un rato lo tenían todas las tiendas.
El sincronizador iba recorriendo los distintos servidores de FTP que tenia en su lista, tras comprobar el archivo/s lo enviaba si es necesario.

A mi me gustaba esta opción por el tema de las licencias y mantenimientos, ya que controlas quien y qué puede subir cada tienda.

vroa74 07-09-2007 04:44:15

Hola a todos.

ya hice el instalador, la verdad me parece relativamente secillo.

Genere una maquina virtual con el VMWare con Windows xp, y ahi probeel instalador, al parecer funciono bien, aun me falta terminar dos secciones del sistemas.

He pensado que por estar probando el instalador en S.O. inmersos pueda que los resultado obtenidos no sean los indicados.

por otra parte Inno Setup no me esta respetando los subdirectorios que le anexo y aun no se por que.

Les seguire dando lata por aqui. muchas gracias a todos.

egostar 07-09-2007 05:24:54

A que te refieres cuando dices esto:

Cita:

Empezado por vroa74 (Mensaje 229096)
por otra parte Inno Setup no me esta respetando los subdirectorios que le anexo y aun no se por que.

Salud OS

Io 08-09-2007 18:27:47

Cita:

Cita:
Empezado por Io
Yo he empezado hace muy poquito con la elaboración de un instalador. Me decante por innosetup , y ya he creado un instalador, en el que he incluido la instalación automática de Fb15 con la aplicación. A mi parecer en un primer momento parece difícil, pero cuando lo entiendes, te das cuenta que puedes hacer de todo.

Hola IO, yo uso innosetup con ISTool y estoy contentiiiisimo, pero no se como hacer lo que tu dices de la instalación automática de fb (en mi caso interbase).

también me interesa mucho saber como has logrado lo del actualizador que actualiza también la db.

¿ alguna pista ?
Perdona cecilio. por no haberte contestado antes , pero hasta hoy no me había dado cuenta.

Sobre instalar Fb15. He bajado de la página de Fb, el archivo comprimido donde vienen todo los archivos necesarios. Hay un archivo de texto donde te explica lo que debes de hacer para instalarlo, y eso es precisamente lo que hago. Con innosetup, le digo que copie los archivos necesarios, y despues ejecuto los ejecutables con los parámetros adecuados.

En estos momentos no tengo a mano el script, en cuanto lo consiga te lo adjunto.:)

Sobre el actualizador, es un poco más complicado(por lo menos como yo le he hecho), por que he utilizado código para cambiar el path de destino de la aplicación, el cual leo del registro de win. Pero currando un poco seguro que lo verás más claro. Lo mismo te digo con este script despues te lo pego.

Saludos:)

Chao.

Io 08-09-2007 18:49:14

Bueno lo prometido es deuda;)

Código:


Instalador

[Setup]

;********************************
AppName=MiAplicación
AppVerName=MiAplicación x.xx
DefaultGroupName=MiAplicación Group
;********************************

OutputDir=.\
OutputBaseFilename=RotaInst
DefaultDirName={pf}\MiAplicación

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

[Types]
Name: "T_Client"; Description: "Instalación Cliente"
Name: "T_Server"; Description: "Instalación Servidor"

[Components]
Name: "C_Client"; Description: "Instalación Cliente"; Types: T_Client T_Server
Name: "C_Program"; Description: "Aplicacion y Programas"; Types: T_Client T_Server
Name: "C_Server"; Description: "Instalación Servidor"; Types: T_Server

[Icons]
Name: "{group}\Aplicaciones RM"; Filename: "{app}\MiAplicacion.exe"


[Registry]
Root: HKLM; Subkey:"SOFTWARE\MiEmpresA\MiAplicación"; Flags: uninsdeletekey



[Files]

;Aplicación
Source: "..\..\Proyecto\MiAplicación.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: C_Program

;Programa gestión usuarios
Source: "..\..\seguridad\security.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: C_Server

;Archivos necesarios para instalar el cliente Fb15
Source: ".\inst_Fb15\IDPLicense.txt"; DestDir: "{app}\Fb15"; Components: C_Client
Source: ".\inst_Fb15\IPLicense.txt"; DestDir: "{app}\Fb15"; Components: C_Client
Source: ".\inst_Fb15\bin\fbclient.dll"; DestDir: "{app}\Fb15\bin"; Components: C_Client
Source: ".\inst_Fb15\bin\instclient.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Client
Source: ".\inst_Fb15\bin\instreg.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Client


;Archivos necesarios para instalar el servidir Fb15
Source: ".\inst_Fb15\aliases.conf"; DestDir: "{app}\Fb15"; Components: C_Server
Source: ".\inst_Fb15\firebird.msg"; DestDir: "{app}\Fb15"; Components: C_Server
Source: ".\inst_Fb15\firebird.conf"; DestDir: "{app}\Fb15"; Components: C_Server
Source: ".\inst_Fb15\readme.txt"; DestDir: "{app}\Fb15"; Components: C_Server
Source: ".\inst_Fb15\security.fbk"; DestDir: "{app}\Fb15"; Components: C_Server
Source: ".\inst_Fb15\security.fdb"; DestDir: "{app}\Fb15"; Components: C_Server
Source: ".\inst_Fb15\bin\fb_inet_server.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\fb_lock_print.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\fbguard.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\fbserver.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\gbak.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\gdef.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\gfix.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\gpre.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\gsec.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\gsplit.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\gstat.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\ib_util.dll"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\install_classic.bat"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\install_super.bat"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\instsvc.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\isql.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\qli.exe"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\bin\uninstall.bat"; DestDir: "{app}\Fb15\bin"; Components: C_Server
Source: ".\inst_Fb15\help\help.fdb"; DestDir: "{app}\Fb15\help"; Components: C_Server
Source: ".\inst_Fb15\include\ib_util.h"; DestDir: "{app}\Fb15\include"; Components: C_Server
Source: ".\inst_Fb15\include\ib_util.pas"; DestDir: "{app}\Fb15\include"; Components: C_Server
Source: ".\inst_Fb15\include\ibase.h"; DestDir: "{app}\Fb15\include"; Components: C_Server
Source: ".\inst_Fb15\include\iberror.h"; DestDir: "{app}\Fb15\include"; Components: C_Server
Source: ".\inst_Fb15\intl\fbintl.dll"; DestDir: "{app}\Fb15\intl"; Components: C_Server
Source: ".\inst_Fb15\lib\fbclient_bor.lib"; DestDir: "{app}\Fb15\lib"; Components: C_Server
Source: ".\inst_Fb15\lib\fbclient_ms.lib"; DestDir: "{app}\Fb15\lib"; Components: C_Server
Source: ".\inst_Fb15\lib\ib_util_ms.lib"; DestDir: "{app}\Fb15\lib"; Components: C_Server
Source: ".\inst_Fb15\udf\fbudf.sql"; DestDir: "{app}\Fb15\udf"; Components: C_Server
Source: ".\inst_Fb15\udf\fbudf.dll"; DestDir: "{app}\Fb15\udf"; Components: C_Server
Source: ".\inst_Fb15\udf\ib_udf.sql"; DestDir: "{app}\Fb15\udf"; Components: C_Server
Source: ".\inst_Fb15\udf\ib_udf.dll"; DestDir: "{app}\Fb15\udf"; Components: C_Server

[Run]
;*********
; CLIENTE
;*********
;Se actualiza registro (Firebird instalado)
Filename: "{app}\Fb15\bin\instreg.exe"; Parameters: "i"; StatusMsg: "Actualizando Registro"; Flags: skipifdoesntexist runhidden waituntilterminated

;Se crea copia de gds32.dll en el directorio de sistema
Filename: "{app}\Fb15\bin\instclient.exe"; Parameters: "i g"; StatusMsg: "Instalando Cliente....."; Flags: skipifdoesntexist runhidden waituntilterminated

;**********
; SERVIDOR
;**********
;Se instala servidor (i), arranque automático (a), tipo superserver(s), se instala guardian(g)
Filename: "{app}\Fb15\bin\instsvc.exe"; Parameters: "i -a -s -g"; StatusMsg: "Instalando servicio....."; Flags: skipifdoesntexist runhidden waituntilterminated

;Se arranca servicio(start)
Filename: "{app}\Fb15\bin\instsvc.exe"; Parameters: "start"; StatusMsg: "Iniciando servicio....."; Flags: skipifdoesntexist runhidden waituntilterminated

;Se presetean usuarios
Filename: "{app}\security.exe"; Parameters: "user i"; StatusMsg: "Actualizando usuarios"; Flags: skipifdoesntexist runhidden waituntilterminated



[UninstallRun]
;**********
; SERVIDOR
;**********
;Se para servicio(stop)
Filename: "{app}\Fb15\bin\instsvc.exe"; Parameters: "stop"; StatusMsg: "Deteniendo servicio....."; Flags: skipifdoesntexist runhidden waituntilterminated

;Se desinstala servidor
Filename: "{app}\Fb15\bin\instsvc.exe"; Parameters: "r"; StatusMsg: "Desistalando servicio....."; Flags: skipifdoesntexist runhidden waituntilterminated


;*********
; CLIENTE
;*********
;Se borra copia de gds32.dll en el directorio de sistema
Filename: "{app}\Fb15\bin\instclient.exe"; Parameters: "r g"; StatusMsg: "Desinstalando Cliente....."; Flags: skipifdoesntexist runhidden waituntilterminated

;Se borra entrada registro (Firebird instalado)
Filename: "{app}\Fb15\bin\instreg.exe"; Parameters: "r"; StatusMsg: "Actualizando Registro....."; Flags: skipifdoesntexist runhidden waituntilterminated

[.code]

function Ya_Existe_Fb:boolean;
var
  aux :string;
begin
  if RegQueryStringValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Firebird Project\Firebird Server\Instances','DefaultInstance', aux) then
    result:=(aux <> '')
  else
    result:=False;
end;


//Se crea aplicación
function InitializeSetup(): Boolean;
begin

  result:=True;

  if not UsingWinNT then
  begin
    result:=False;
    MsgBox('La versión de windows debe ser: Windows NT 4.0, 2000, XP', mbError, MB_OK);
  end
  else
  if Ya_Existe_Fb then
  begin
    result:=False;
    MsgBox('Ya se encuentra instalada una versión de FireBird', mbError, MB_OK);
  end;
end;



Actualizador
[Setup]


;************************
AppName=MiAplicación
AppVerName=MiAplicación x.xx
DefaultGroupName=MiAplicación Group
;************************

;No se crea directorio para la aplicación
CreateAppDir=no

OutputDir=.\
OutputBaseFilename=RMupdate
Compression=lzma
SolidCompression=yes

;No crea apunte en Panel de Control
CreateUninstallRegKey=no


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

[Files]
;El ejecutable se toma de la carpeta Proyecto
Source: "..\..\proyecto\MiAplicación.exe"; DestDir: "{code:GetDirect|p}"; Flags: ignoreversion; components: program

;Archivo de configuración
Source: "..\..\ControlVersiones.html"; DestDir: "{code:GetDirect|v}"; components: version

;El Fuente se toma de la carpeta Proyecto
Source: "..\..\proyecto\*.dfm"; DestDir: "{code:GetDirect|f}"; Flags: ignoreversion; Components: sources
Source: "..\..\proyecto\*.pas"; DestDir: "{code:GetDirect|f}"; Flags: ignoreversion; Components: sources
Source: "..\..\proyecto\*.cfg"; DestDir: "{code:GetDirect|f}"; Flags: ignoreversion; Components: sources
Source: "..\..\proyecto\*.dof"; DestDir: "{code:GetDirect|f}"; Flags: ignoreversion; Components: sources
Source: "..\..\proyecto\*.res"; DestDir: "{code:GetDirect|f}"; Flags: ignoreversion; Components: sources
Source: "..\..\proyecto\*.dpr"; DestDir: "{code:GetDirect|f}"; Flags: ignoreversion; Components: sources

[Types]
Name: "compact"; Description: "Instalación compacta"
Name: "custom"; Description: "Instalación personalizada"; Flags: iscustom
Name: "full"; Description: "Instalación completa"

[Components]
Name: "program"; Description: "Ejecutable"; Types: full compact custom; Flags: fixed
Name: "sources"; Description: "Código Fuente"; Types: full custom
Name: "version"; Description: "Archivo versiones"; Types: full custom





;CONFIGURACIÓN NECESARIA PARA ACTUALIZAR BD
;COMENTAR ESTAS LÍNEAS CUANDO NO SEA NECESARIO ACTUALIZAR BD.
;*********************************************************************************************************************************************************
[Files]
Source: "..\..\control_configuracion\MODIF BD\Exe\Act_BD.exe"; DestDir: "{code:GetDirect|p}"; Flags: ignoreversion deleteafterinstall ; components: datos

[Components]
Name: "datos"; Description: "Actualización Base de Datos"; Types: full custom

[Run]
Filename: "{code:GetDirect|p}\Act_BD.exe"; Parameters: "auto -v 4-03.08.07 -c 3-19.01.07"; StatusMsg: "Actualizando Estructura BD"; Flags: skipifdoesntexist waituntilterminated
;*********************************************************************************************************************************************************


[.code]
const
  TIT_FUENTE ='Código Fuente';
  TIT_VERSION ='Archivo Versiones';
  REG_CLAVE_PROGRAM='SOFTWARE\RM\ROTA_SQL\APLICACION';
  REG_VALOR_PROGRAM='Path';

  REG_CLAVE_INSTALL='SOFTWARE\RM\SETUP\UPDATE';
  REG_VALOR_INSTALL_FUENTE='Fuente';
  REG_VALOR_INSTALL_VERSION='Version';

  CLASE_APLICACION='TfrmPrincipal';
var
  Dir_Exe,
  Dir_Fuente,
  Dir_Version :string;
  DataDirPage: TInputDirWizardPage;
  Num_Dirs :integer;


//Devuelve el directorio de destino segun parametro
function GetDirect( p :string):string;
begin
    if p = 'p' then
    begin
      if Dir_Exe <>'' then
        result:=Dir_Exe
    end
    else
    if p = 'f' then
    begin
      if Dir_Fuente <>'' then
        result:=Dir_Fuente
    end
    else
    if p = 'v' then
    begin
      if Dir_Version <>'' then
        result:=Dir_Version
    end;
end;




//Evento al confirmarlas carpetas de destino
function NextButDir(Sender: TWizardPage): Boolean;
var
  j:integer;
begin

//Comprobamos entradas no vacía
  result:=(Num_Dirs > 0);

  if result then
    for j:=0 to Num_Dirs -1 do
      result:=result and (DataDirPage.Values[j]<>'');

  if result then
    for j:=0 to Num_Dirs -1 do
      if DataDirPage.Values[j] <> '' then
        if DataDirPage.PromptLabels[j].caption = TIT_FUENTE then
          Dir_Fuente:=DataDirPage.Values[j]
        else
          Dir_Version:=DataDirPage.Values[j];
end;






//Evento de click en botón siguiente
function NextButtonClick(CurPageID: Integer): Boolean;
begin
  result:=True;

//  Despues de la página selección componentes
    if CurPageID = wpSelectComponents then
  begin
//  Si se ha seleccionado cualquiera de los dos componentes se abre ventana de directorios
    if IsComponentSelected('sources') or IsComponentSelected('version') then
    begin
      DataDirPage := CreateInputDirPage(CurPageID,
        'Otros elementos que se copiarán.', '',
        'Seleccione la carpeta donde se copiarán los siguientes elementos, despues haga click en siguiente.',
        True, '');

      DataDirPage.OnNextButtonClick:=@NextButDir;

      Num_Dirs:=0;

      if IsComponentSelected('sources') then
      begin
        DataDirPage.Add(TIT_FUENTE);
        DataDirPage.values[Num_Dirs]:=GetDirect('f');
        Num_Dirs:=Num_Dirs +1;
      end;

      if IsComponentSelected('version') then
      begin
        DataDirPage.Add(TIT_VERSION);
        DataDirPage.values[Num_Dirs]:=GetDirect('v');
        Num_Dirs:=Num_Dirs +1;
      end;
    end;
  end;
end;



procedure getDirectorios;
var
  aux: string;
begin

  Dir_Exe:='';
  Dir_Fuente:='';
  Dir_Version:='';

//Directorio actual aplicación
  if RegQueryStringValue(HKEY_LOCAL_MACHINE, REG_CLAVE_PROGRAM,REG_VALOR_PROGRAM, aux) then
    if aux <> '' then
      Dir_Exe:=ExtractFilePath(aux);

//Directorio Fuente
  RegQueryStringValue(HKEY_LOCAL_MACHINE, REG_CLAVE_INSTALL,REG_VALOR_INSTALL_FUENTE, Dir_Fuente)

//Directorio Version
  RegQueryStringValue(HKEY_LOCAL_MACHINE, REG_CLAVE_INSTALL,REG_VALOR_INSTALL_VERSION, Dir_Version)


//Directorio Fuentes
  if Dir_Fuente='' then
    Dir_Fuente:=Dir_Exe+'\fuente';

//Directorio Versiones
  if Dir_Version='' then
    Dir_Version:=Dir_Exe+'\Version';
end;


//Se crea aplicación
function InitializeSetup(): Boolean;
begin

  getDirectorios;

  if Dir_Exe = '' then
  begin
    result:=False;
    MsgBox('La aplicación no se encuentra instalada', mbError, MB_OK);
  end
  else
  begin
//  Comprobamos que la aplicación no se encuentre ejecutandose
    if FindWindowByClassName(CLASE_APLICACION)<> 0 then
    begin
      result:=False;
      MsgBox('La aplicación actualmente se está ejecutando.', mbError, MB_OK);
    end
    else
      result:=True;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
//Instalación terminada
  if CurStep=ssPostInstall then
  begin
    RegWriteStringValue(HKEY_LOCAL_MACHINE, REG_CLAVE_INSTALL,REG_VALOR_INSTALL_FUENTE, Dir_Fuente);
    RegWriteStringValue(HKEY_LOCAL_MACHINE, REG_CLAVE_INSTALL,REG_VALOR_INSTALL_VERSION, Dir_Version);
  end;
end;


Espero que te sirva:)

Dado de baja 09-09-2007 09:17:20

Muchas Gracias, IO.

Ya estoy mirando lo que dices.


La franja horaria es GMT +2. Ahora son las 02:52:37.

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