Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con Inno Setup ,con alias y DBE (https://www.clubdelphi.com/foros/showthread.php?t=36382)

David 10-10-2006 18:34:15

Problemas con Inno Setup ,con alias y DBE
 
Tengo ya el inno setup , pero tengo dos dudas , una es cuando instalo , si esta el BDE Administrator , que no lo instale , es decir que detecte si esta y si no esta que lo instale y la otra es añadir los alias según el directorio donde instale el usuario el programa .

Mi programa tiene dos alias , que estan en dos carpetas distintas , dentro de donde está instalado el programa .

He mirado , en la web de Inno , aquí :

http://www.jrsoftware.org/iskb.php?bde

Me dice , que añada el programa Minireg.exe , pero claro no me explica , lo que he dicho yo , de instalar si esta o no esta el BDE .

En cuanto a los alias , te dice que añadas un programa realizado en Delphi , llamado AddAlias.exe , pero este programa , no te instala los alias en el lugar elegido por el usuario para instalar el programa . Además mi programa tiene dos alias , habría que ver como resuelvo este problema .

De todo lo que he dicho , lo que más me interesa , es instalar los alias .

Un saludo

roman 10-10-2006 18:47:46

Bueno, según yo entiendo, usas AddAlias por cada alias que quieras instalar pasando como parámetro la ruta:

Código:

[run]
AddAlias mi_alias c:\ruta\al\directorio paradox
AddAlias mi_otro_alias c:\ruta\al\otro\directorio paradox

No lo he probado, pero imagino que en la sección [run] puedes hacer uso de las constantes de la instalación, tales como {app} (directorio de instalación):

Código:

[run]
AddAlias mi_alias {app}\subdirectorio\de\tablas paradox

// Saludos

roman 10-10-2006 18:51:58

Mmm... La sintaxis es incorrecta. Sería más bien así:

Código:

[run]
Filename: "{tmp}\AddAlias.exe"; Parameters: """{app}\subdirectorio"""

// Saludos

David 12-10-2006 16:56:10

Cita:

Empezado por roman
Mmm... La sintaxis es incorrecta. Sería más bien así:

Código:

[run]
Filename: "{tmp}\AddAlias.exe"; Parameters: """{app}\subdirectorio"""

// Saludos

Pero con esta sintaxis , donde pongo los alias ?

roman 12-10-2006 17:59:26

Acabo de probarlo y así me funciona:

Código:

[Run]
Filename: "{tmp}\AddAlias.exe"; Parameters: "mi_alias ""{app}\tablas"" PARADOX"

Observa las comillas alrededor de {app}\tablas. Si las omites parece que no funciona.

// Saludos

David 13-10-2006 21:25:54

No me sale , no sé donde esta el error , pero no me sale , pongo todo el código a ver si alguien ve donde este el error .

compila bien , instala el programa , pero no instala los alias .

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

[Setup]
AppName=Miprograma
AppVerName=Miprograma1.5
DefaultDirName={pf}\Miprograma
DefaultGroupName=Miprograma
DisableProgramGroupPage=yes
OutputDir=C:\My InstallShield Express Projects
OutputBaseFilename=Miprograma
SetupIconFile=C:\Miprograma.ico
Compression=lzma
SolidCompression=yes

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

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

[Files]
Source: "C:\Miprograma\Miprograma.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Miprograma\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "AddAlias.exe"; DestDir: "{tmp}"

; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\Miprograma"; Filename: "{app}\Miprograma.exe"
Name: "{group}\{cm:UninstallProgram,Miprograma}"; Filename: "{uninstallexe}"
Name: "{userdesktop}\Miprograma"; Filename: "{app}\Miprograma.exe"; Tasks: desktopicon

[Run]
Filename: "{app}\Miprograma.exe"; Description: "{cm:LaunchProgram,Miprograma}"; Flags: nowait postinstall skipifsilent
Filename: "{tmp}\AddAlias.exe"; Parameters: "alias1""{app}""PARADOX"
Filename: "{tmp}\AddAlias.exe"; Parameters: "alias2""{app}\tablas""PARADOX"

David 13-10-2006 21:44:04

Ya me sale , habia que poner un poco de espacio entre las comillas , las que estan detras de cada alias y un espacio delante de la palabra PARADOX.

Código Delphi [-]
Filename: "{tmp}\AddAlias.exe"; Parameters: "alias1 ""{app}"" PARADOX"
Filename: "{tmp}\AddAlias.exe"; Parameters: "alias2 ""{app}\tablas"" PARADOX"

Ya sé que este programa es gratis , pero por dejar un pequeño espacio dentro de unas comillas , no deberia de ser motivo para que no funcione una aplicación , me he estado toda la tarde dandole vueltas por este aparentemente insignificante detalle .

Otro detalle de la aplicación , es que no desinstala los alias , al desinstalar el programa , y si desinstala el programa y lo instalas de nuevo , en otro directorio , pues no te actualiza la ruta de los alias .

egostar 13-10-2006 22:10:08

Otra opción que tienes es la siguiente:

Cita:

[Run]
Filename: "{app}\AddAlias.exe"; Parameters: "MIBASE {app}\tables PARADOX"
Sin tantas comillas, recuerda que estas pasando parametros en la linea de comandos.

Cita:

Empezado por David
Otro detalle de la aplicación , es que no desinstala los alias , al desinstalar el programa , y si desinstala el programa y lo instalas de nuevo , en otro directorio , pues no te actualiza la ruta de los alias

Pues si se puede borrar agregando un signo - al Alias

Cita:

Filename: "{app}\AddAlias.exe"; Parameters: "-MIBASE"
Y también hay que modificar el programa AddAlias.

Aqui pego la modificación

Código Delphi [-]
 
  DbiInit(nil);
  try
    if FDelete then
      try
        DbiDeleteAlias(nil, PChar(GAlias));
      except
      end
    else // Este else no esta en el original.
      try
        DbiAddAlias(nil, PChar(StrToOem(GAlias)),
                         PChar(StrToOem(FDrvName)),
                         PChar(FParams), True);
        DbiCfgSave(nil, nil, True);
      except
      end;
  finally
    DbiExit();
  end;

Saludos

roman 13-10-2006 22:23:29

Cita:

Empezado por egostar
Sin tantas comillas, recuerda que estas pasando parametros en la linea de comandos.

Las comillas son necesarias porque la ruta {app} pudiera tener espacios (como en C:\Archivos de programa\Mi App). Justamente por eso es que el espacio que menciona David no es una cuestión del InnoSetup sino de como se pasan los parámetros a un ejecutable en Windows.

Muy buena la adición de cómo borrar alias. No estoy seguro, pero me parece que InnoSetupo permite especificar que eso se ejecuta al desinstalar el programa, ¿es así?

// Saludos

egostar 13-10-2006 22:24:11

Se me pasó, tambien puedes hacer que se ejecute cuando desinstalas la aplicación usando lo siguiente:

Cita:

[UninstallRun]
Filename: Addalias.exe; Parameters: "-MIBASE"

Saludos.

roman 13-10-2006 22:27:55

¡Ah! Pues con esto ya queda bien redondito :) Creo que este hilo es el hilo a citar para futuras referencias respecto a la instalación del BDE.

// Saludos

egostar 13-10-2006 22:30:36

Cita:

Empezado por roman
Las comillas son necesarias porque la ruta {app} pudiera tener espacios (como en C:\Archivos de programa\Mi App). Justamente por eso es que el espacio que menciona David no es una cuestión del InnoSetup sino de como se pasan los parámetros a un ejecutable en Windows.

Creo que tienes razón, yo normalmente no uso directorios con espacios, buen punto.

Otra cosa que les recomiendo es usar otra herramienta que va de la mano con InnoSetup y se llama ISTool

Te crea el mismo archivo que usa InnoSetup pero desde una interfaz gráfica.

Saludos.

egostar 14-10-2006 02:46:24

Cita:

Empezado por David
Me dice , que añada el programa Minireg.exe , pero claro no me explica , lo que he dicho yo , de instalar si esta o no esta el BDE .

Para complementar este tema y evitar que se instale de nuevo el BDE si ya existe, modifique el programa MiniReg de Jordan Russell agregando lo siguiente:

Código Delphi [-]
 
{ MiniReg v1.0 by Jordan Russell
  Note: For Delphi 3+, you'll need to change "OLE2" below to "ActiveX". }
uses
  Windows, ActiveX,BDE; // BDE para usar la función dbiInit
 
var
  BDECheck : Bool;
 
{x$R *.RES}
 
.......
.......
 
begin
  if ParamCount <> 1 then
     Exit;
  BDECheck := (dbiInit(nil) = 0);  //Aqui verifico si existe BDE, 
                                            //Esta idea la tomé de Trucomanía
  If BDECheck = false then begin  //Actúo en consecuencia
     CoInitialize (nil);
     try
       RegisterServer (ParamStr(1));
     finally
       CoUninitialize;
     end;
  end;
end;

Saludos.

David 15-10-2006 13:32:01

No me desinstala los alias :

si pongo esto , después de poner el else en el programa AddAlias como dice egostar :

Código Delphi [-]
[Run]
Filename: "{app}\Miprograma.exe"; Description: "{cm:LaunchProgram,Miprorgrama}"; Flags: nowait postinstall skipifsilent
Filename: "{tmp}\AddAlias.exe"; Parameters: "-Alias1 ""{app}"" PARADOX"
Filename: "{tmp}\AddAlias.exe"; Parameters: "-Alias2 ""{app}\tablas"" PARADOX"

Al poner - delante del alias , ni siquiere me instala los alias .

Si pongo esto , con el AddAlias original , y en la sección [Run] lo que he puesto arriba pero sin el signo - delante del alias , me instala los alias , pero no me lo desinstala .

Código Delphi [-]
[UninstallRun]
Filename: "{tmp}\AddAlias.exe"; Parameters: "-Alias1 ""{app}"" PARADOX"
Filename: "{tmp}\AddAlias.exe"; Parameters: "-Alias2 ""{app}\tablas""

Y por otra parte , según dicen en la nueva versión de Inno setup , yo no puedes poner un icono de desinstalación , el comando UninstallIconFile , ya no funciona , queda muy mal , ir a inicio , programas y ver que el icono del programa y el desinstalación es el mismo .

Lepe 15-10-2006 14:00:59

Cita:

Empezado por David
Y por otra parte , según dicen en la nueva versión de Inno setup , yo no puedes poner un icono de desinstalación , el comando UninstallIconFile , ya no funciona , queda muy mal , ir a inicio , programas y ver que el icono del programa y el desinstalación es el mismo .

Yo lo veo muy útil, se supone que estas en la ventana de "Desinstalar Programas", el hecho de ver un icono distinto desconcierta un poco, ya que tienes que leer el nombre para saber el programa que quieres desinstalar. Al ver el mismo icono de tu aplicación, lo localizas más rápido.

... Aunque sobre gustos no hay nada escrito ;).

Saludos

roman 15-10-2006 16:15:10

Cita:

Empezado por Lepe
se supone que estas en la ventana de "Desinstalar Programas"

No necesariamente. Creo que David se refiere al icono que se coloca en el menú inicio:

Inicio|Programas|Tu Aplicación

Ahí es donde resulta confuso.

En cuanto a por qué no funciona la desinstalación de alias hay que considerar dos puntos:

1. Tal como está no sirve porque AddAlias.exe se copia al directorio {tmp} y todo lo que está ahí se borra al final de la instalación. Debe entonces copiarse a algún otro drectorio, por ejemplo {app} o {app}\bin.

2. Revisando el código fuente de AddAlias veo que el signo - antes del nombre del alias no hace lo que estamos pensando.

Cita:

Empezado por código fuente de AddAlias
Código:

  1: Name of alias
      if begins with '-' then delete first if exist
                        else do nothing if exist


Es decir, el alias de cualquier forma se agrega, sólo que si ya existe un alias con ese nombre, se borra antes.

Podría modificarse el programa para que sólo borre el alias, pero creo que yo lo que haría para matener las cosas separadas es crear un segundo programa DeleteAlias que sólo borre alias. Este DeleteAlias es el que se copiaría a {app}.

Le queda de tarea a David :)

// Saludos

David 15-10-2006 16:54:50

A mi si esta y lo borra me viene perfecto , aunque luego lo instale .

Pero es que si pongo el signo - , como he dicho , es que no hace nada de nada .

Por que la única utilidad para desinstalar los alias es la siguiente . Cuando te instala el programa ,te instala los alias en el directorio donde esta la aplicación , si desinstalas , y no quitas los alias (el usuario no sabe hacerlo ) , luego instalas y si eliges otro directorio , los alias apuntan al directorio inicial , y el programa no funciona .

Por lo que si al instalar , encuentra los alias , los borrra y luego los escribe en la dirección correcta , estaria bien por mi parte .

Pero reitero , si pongo el signo - , como he explicado que he hecho , no hace nada de nada .

David 15-10-2006 18:32:14

Cita:

Empezado por roman
No necesariamente. Creo que David se refiere al icono que se coloca en el menú inicio:

Inicio|Programas|Tu Aplicación

Ahí es donde resulta confuso.

Ahí es donde digo , el icono del programa y el de desinstalación es el mismo . Y además primero te sale el de desintalación y luego el del programa . No es que sea un detalle muy importante , pero prefiero tener primero el icono del programa y luego otro dinstinto y debajo el de desinstalar.

Lepe 15-10-2006 18:41:56

Bueno, quizás y solo quizás, no se deba poner el icono de desintalación tan a mano de usuarios inexpertos, y por esa razón, no debe ponerse en inico -> Programas (alguna vez le he dado sin querer :D)

Nero 6, Office, incluso BDS 2006 no traen los iconos de desinstalar en inicio -> programas.

El hecho de hacer un programa para añadir alias y otro para borrar, me parece demasiado, yo al menos cambiaría el nombre del programa "AddAlias" por "AliasManager" con una linea de comando:

AliasManager /add MiAlias
AliasManager /del Mialias
AliasManager /h
AliasManager /help
AliasManager /?

Las 3 últimas muestran un mensaje con los parámetros que se pueden usar y qué hace cada uno.

Saludos

roman 17-10-2006 23:04:42

Regresando a lo del icono para desinstalar:

Si se quiere cambiar el icono que aparece en la ventana "Agregar o quitar programas" basta usar la opción UninstallDisplayIcon en la sección [Setup]. De hecho, también puede cambiarse el texto que aparece usando UninstallDisplayName:

Código Delphi [-]
[Setup]
...
UninstallDisplayIcon={app}\eliminar.ico
UninstallDisplayName="¡¡Quita ya esta cosa de mi sistema!!"
...

También puede usarse una librería de iconos o un exe o dll. En tal caso se puede especificar el índice del icono que se quiera usar. Por ejemplo:

Código Delphi [-]
[Setup]
...
UninstallDisplayIcon={sys}\shell32.dll,31
...

hará que aparezca el icono número 31 de la librería shell32.dll (que resulta ser el icono de la papelera).

Por otra parte, también puede cambiarse el icono que usemos en el menú de Inicio para acceso directo al desinstalador. De hecho, como con cualquier otro icono de acceso directo, puede usarse uno distinto del de la aplicación destino. Para ello hay que usar la directiva IconFileName y opcionalmente IconIndex. Por ejemplo:

Código Delphi [-]
[Icons]
Name: "{group}\Quitar programa"; Filename: "{uninstallexe}"; IconFilename: "eliminar.ico"

para usar un icono fijo, o bien

Código Delphi [-]
[Icons]
Name: "{group}\Quitar programa"; Filename: "{uninstallexe}"; IconFilename: "{sys}\shell32.dll"; IconIndex: 31

Coincido con Lepe en que en la ventana "Agregar o quitar programas" conviene usar el mismo icono que el de la aplicación para poder distinguirlo rápidamente. Pero en el menú Inicio, usar un icono distinto evitará que accidentalmente desisntalemos la aplicación.

// Saludos


La franja horaria es GMT +2. Ahora son las 22:44:45.

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