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)

egostar 17-10-2006 23:56:30

Cita:

Empezado por Lepe
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:

"Robandome" la buena idea de Lepe les dejo aqui las modificaciones que hice.

Código Delphi [-]
 
{
program adds a alias to the BDE configuration file
 parameters:
   0: programname + path (standard parameter of OS)
   1: Name of alias
      if begins with '-' then delete first if exist
                         else do nothing if exist
   2: path to data directory
   3: BDE driver name
Bugfix: Savierhs Lopez Arteaga 3.1.2001
        AddAlias didn't delete alias with beginning '-'
 
      Modificación para una operación genérica
   1: Tipo de Operación  ( /ADD, /DEL)
   2: Nombre de Alias
   3: Ruta de Directorio de Datos
   4: Driver de BDE
}
 
program AliasManager;
uses
  Windows, SysUtils, BDE;
 
var
  GType:     string; //Tipo de Operación
  GAlias:    string;
  GDriver:   string;
  GAliasDir: string;
  FParams:   string;
  FDrvName:  string;
  FDelete:   boolean;
  i:         integer;
 
function StrToOem(const AnsiStr: string): string;
begin
  SetLength(Result, Length(AnsiStr));
  if Length(Result) > 0 then
    CharToOem(PChar(AnsiStr), PChar(Result));
end;

{-----------------------------------------------------------------------}
begin
  for i := 1 to ParamCount do
  begin
    case i of
      1: GType     := ParamStr(1);
      2: GAlias    := ParamStr(2);
      3: GAliasDir := ParamStr(3);
      4: GDriver   := ParamStr(4);
    end;
  end;
 
  // Tipo de Operación
  if GType = '/DEL' then
     FDelete := True
  else FDelete := False;
 
  //default alias
  if GAliasDir = '' then GAliasDir := ExtractFilePath(ParamStr(0))+'Tables';
  FDrvName := GDriver;

  //set Parameters, the driver and server name
  if (CompareText(GDriver, szCFGDBSTANDARD) = 0) or
     (CompareText(GDriver, szPARADOX) = 0)       or
     (CompareText(GDriver, szDBASE) = 0)         or
     (CompareText(GDriver, szFOXPRO) = 0)        or
     (CompareText(GDriver, szASCII) = 0)         then
  begin
    if (CompareText(GDriver, szCFGDBSTANDARD) = 0) then FDrvName := szPARADOX;
 
    //set parameters for the new alias
    FParams := Format('%s:"%s"',  [szCFGDBPATH, GAliasDir]) +
               Format(';%s:"%s"', [szCFGDBDEFAULTDRIVER, GDriver]) +
               Format(';%s:"%s"', [szCFGDBENABLEBCD, szCFGFALSE]);
  end else begin
    if (CompareText(GDriver, 'INTRBASE') = 0)
    then FParams := Format('%s:"%s"',  [szSERVERNAME, GAliasDir])
    else FParams := Format('%s:"%s"',  [szDATABASENAME, GAliasDir]);
    //add other Parameters here !!!!!!!!!!!!!!!!!
  end;
 
  DbiInit(nil);
  try
    if FDelete then
      try
        DbiDeleteAlias(nil, PChar(GAlias));
      except
      end
      else //Conserve este else
      try
        DbiDeleteAlias(nil, PChar(GAlias)); //Se debe borrar el Alias si existe
                                                     // ya que no hay una función que
                                                    // permita cambiar el Path
        DbiAddAlias(nil, PChar(StrToOem(GAlias)),
                         PChar(StrToOem(FDrvName)),
                         PChar(FParams), True);
        DbiCfgSave(nil, nil, True);
      except
      end;
  finally
    DbiExit();
  end;
end.
//----------------------------------------------------------------------

Por otro lado el programa de instalación se ve así

Cita:

[Files]
Source: "D:\Installers\AliasManager\AliasManager.exe"; DestDir: "{app}"

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"

[Run]
Filename: "{app}\AliasManager.exe"; Parameters: "/ADD MANAGER ""{app}""\tables PARADOX"

[UninstallRun]
Filename: "{app}\AliasManager.exe"; Parameters: "/DEL MANAGER"

Ya he probado instalando, reinstalando cambiando el path del sistema y desinstalando.

Hizo todo lo que se esperaba.

Saludos.

roman 18-10-2006 18:10:31

Yo añadiría el StrToOem al FParams. Haciendo una prueba, si se ejecuta el programa desde la línea de comandos y se le pasa una ruta que tenga acentos, no la lee correctamente.

// Saludos

David 19-10-2006 18:26:01

Cita:

Empezado por egostar
[Files]
Source: "D:\Installers\AliasManager\AliasManager.exe"; DestDir: "{app}"

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"

[Run]
Filename: "{app}\AliasManager.exe"; Parameters: "/ADD MANAGER ""{app}""\tables PARADOX"

[UninstallRun]
Filename: "{app}\AliasManager.exe"; Parameters: "/DEL MANAGER"

Aquí hay algo que no entiendo y es donde pones el alias .

Imaginemos que tengo un alias , llamado Alias1 , dónde lo pondría ?

Con respecto a lo que dice román , de poner StrToOem(FParams) , a cual hay que ponerle esta función , quizás sólo a este :

DbiAddAlias(nil, PChar(StrToOem(GAlias)),
PChar(StrToOem(FDrvName)),
PChar(StrToOem(FParams)), True);

Un saludo

egostar 19-10-2006 18:31:56

Cita:

Empezado por David
Aquí hay algo que no entiendo y es donde pones el alias .

Imaginemos que tengo un alias , llamado Alias1 , dónde lo pondría ?

Con respecto a lo que dice román , de poner StrToOem(FParams) , a cual hay que ponerle esta función , quizás sólo a este :

DbiAddAlias(nil, PChar(StrToOem(GAlias)),
PChar(StrToOem(FDrvName)),
PChar(StrToOem(FParams)), True);

Un saludo

Aqui te muestro donde.

Cita:

[Run]
Filename: "{app}\AliasManager.exe"; Parameters: "/ADD ALIAS1 ""{app}""\tables PARADOX"

[UninstallRun]
Filename: "{app}\AliasManager.exe"; Parameters: "/DEL ALIAS1"

Saludos

David 24-10-2006 16:15:18

La instalación ya me funciona perfectamente .

Pero puestos a mejorar en este post , me pregunto si seria posible una instalación en red con los alias y todo .

Recuerdo que para instalar paradox en red , hay que instalar en BDE en los dos ordenadores . Hay que crear 2 unidades mapeadas , por ejemplo J e I . Hay que crear una carpeta dentro del directorio de la aplicación llamada por ejemplo net.

Los alias , ya no apuntan a app/tablas , sino a J:/tablas (J:\ unidad mapeada donde esta el programa ) y además en el BDE , en la página de Configuración , en Drivers -> Native -> Paradox , hay que poner la unidad mapeada I , en Net Dir , que corresponde a la carpeta {app\net} .

Hacer esto para instalar paradox en red no es dificil , lo haces una vez o dos y ya lo sabes para otras , pero pregunto , habría alguna posibilidad de hacer esto con el instalador Inno Setup .

O esto ya es demasiado :D

Lepe 25-10-2006 00:52:07

Simplemente no uses unidades mapeadas.

Puedes usar rutas del tipo : "\\nombreservidor\nombrecarpeta".

Al ser compartida con acceso global, tambien comparte todas las subcarpetas. Esa carpeta tendrá una subcarpeta que se llama "net" y dentro es donde redireccionas el NETFILEDIR de tu session en paradox.

Al realizar la instalación con innosetup, lo mejor es hacerlo en una memoria USB, de esa forma tu cliente puede elegir qué ordenador de la red actuará como servidor, en un archivo se guarda la configuración de la instalación "Servidor", y despues al instalar en modo cliente se lee de ese archivo. Todo queda configurado correctamente.

Los alias pueden ser creados dinámicamente con Database.Session.AddStandardAlias así que tampoco es problema.

El problema de TODO es elegir un camino de los 300 que llevan al mismo fin.

Saludos.


La franja horaria es GMT +2. Ahora son las 08:43:12.

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