Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Instalador (https://www.clubdelphi.com/foros/showthread.php?t=44963)

pvazquez 19-06-2007 14:05:31

Instalador
 
He creado un aaplicacion cliente a la que entre otra variables tengo que indicarle la ip a la que se tiene que conectar.

Quiero hacerlo desde el instalador pero no se como.

Se que tengo que agregar cuadros de dialogo en el instalador para despues asignar los valores a las variables de mi codigo.

Pero no se:
1- donde se guarda la informacion que se pone en los cuadros de dialogo.
2- Como asignar ese valor a las variables en mi codigo.

Agradezco toda la ayuda.

He programado en .NET pero he visto que aqui utilizan el installshield y este programa tb puede usarse en VS.NET

jhonny 19-06-2007 15:43:45

Bueno, el InstallShield me a parecido muy bueno para instalar aplicaciones y toda la cosa... Pero creo que en tu caso seria mas conveniente que usaras el InnoSetup que seguramente te permitirá personalizar con mas flexibilidad el asunto.

afxe 19-06-2007 16:14:33

Te comento lo que hago yo, que no quiere decir que sea la mejor forma, pero a mí me da resultado: Tanto la dirección IP del servidor, como el path de la base de datos, último usuario que ha accedido, modo de acceso, etc... las guardo en el registro de windows. La instalación la hago normal, con el InstallShield o un pequeño programa de copia y registro de librerias, dependiendo del caso, pero cuando la aplicación se ejecuta por primera vez y detecta que estas variables de entorno no tienen valor o no existen, saco una pantalla de configuración para que el usuario o instalador ponga los valores correspondiente. Además, saco esta ventana cada vez que hay un problema de conexión, por si el servidor se estropea y es necesario redireccionar el acceso a la BD a otra máquina de la red.

pvazquez 20-06-2007 03:16:11

Gracias por las respuestas, miraré el innosetup a ver que tal, pero...
afxe me parece acertada esa idea, incluso en la ayuda de microsoft explican mas o menos eso, lo que pasa es que:

Como se guarda la información en el registro??, al ponerla en los cuadros de dialogo?? Me podrías indicar como??

Por otro lado, como asigno el valor a las variables de mi código??

Gracias afxe, espero tu respuesta.

jhonny 20-06-2007 15:49:47

Cita:

Empezado por pvazquez
Gracias por las respuestas, miraré el innosetup a ver que tal, pero...
afxe me parece acertada esa idea, incluso en la ayuda de microsoft explican mas o menos eso, lo que pasa es que:

Como se guarda la información en el registro??, al ponerla en los cuadros de dialogo?? Me podrías indicar como??

Por otro lado, como asigno el valor a las variables de mi código??

Gracias afxe, espero tu respuesta.

Aquí en el foro hay varios ejemplos de como manejar el registro, pero si no te basta con ello podrás usar la ayuda y buscar información acerca de la clase TRegistry.

afxe 20-06-2007 17:04:58

Sobre TRegistry
 
Jhonny tiene razón, en la ayuda viene todo muy bien documentado, no obstante te propongo una introducción simple:

Código Delphi [-]
 
  vPath   := '';
  vIP     := '';
  vIP     := Lee_Registro(HKey_Local_Machine, 'SOFTWARE\MiEmpresa\DATABASES\', 'IP',     '127.0.0.1' );
  vPath   := Lee_Registro(HKey_Local_Machine, 'SOFTWARE\MiEmpresa\DATABASES\', 'Path',   ''   );
  vUsua   := Lee_Registro(HKey_Current_user, 'SOFTWARE\MiEmpresa\USERS\'    , 'Codigo', '1'  );
  if (Trim(vPath) = '') then begin
    InputQuery('Crear/Cambiar Servidor de Datos', 'Direccion IP Servidor:', vIP);
    InputQuery('Crear/Cambiar Servidor de Datos', 'Nueva Base de datos:', vPath);
  end;
  if Trim(vPath) = '' then begin
    MsgError('No ha definido correctamente el servidor de datos');
    Application.Terminate;
    EXIT;
  end;
 
 
    DM.MiBaseDatos.DatabaseName := vIP+':'+vPath;
    try
      DM.MiBaseDatos.Open;
      Escribe_Registro(HKey_Local_Machine, 'SOFTWARE\MiEmpresa\DATABASES\', 'IP', vIP);
      Escribe_Registro(HKey_Local_Machine, 'SOFTWARE\MiEmpresa\DATABASES\', 'Path', vPath);
      Try
        QryUsu.Open;
        QryUsu.FetchAll;
        if QryUsu.Locate('CODIGO', vUsua, [loCaseInsensitive]) then
          ShowMessage('Bienvenido ' + QryUsuNOMBRE.AsString);
      except
        on E: Exception do begin
           MsgError('Ocurre algún problema al acceder a los datos: ' + #10+#13 + E.Message);
           Application.Terminate;
        end;
      end;
    except
      on E: Exception do begin
         MsgError('Ocurre algún problema al abrir la base de datos: ' + #10+#13 + E.Message);
         Application.Terminate;
      end;
    end;

Ya te adjunto las dos rutinas de lectura y escritura...

Código Delphi [-]
 
Function Lee_Registro(Raiz :HKEY; Seccion, Clave, ValorPorDefecto: String): String;
var
  Reg: TRegistry;
begin
  Result := ValorPorDefecto;
  Reg    := TRegistry.Create;
  try
    Reg.RootKey := Raiz;
    if Reg.OpenKey(Seccion, False) then Result := Reg.ReadString(Clave);
    if Result = '' then Result := ValorPorDefecto;
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
end;
 
Procedure Escribe_Registro(Raiz :HKEY; Seccion, Clave, Valor: String);
var
  Reg: TRegistry;
begin
  Reg    := TRegistry.Create;
  try
    Reg.RootKey := Raiz;
    Reg.OpenKey(Seccion, True);
    Reg.WriteString(Clave, Valor);
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
end;

No sé si habré copiado algo mal, pero seguro que te dará una idea. No dejes de leer la ayuda para afianzar los conocimientos sobre TRegistry.

Saludos.


La franja horaria es GMT +2. Ahora son las 14:24:24.

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