Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Instalable con contraseña? (https://www.clubdelphi.com/foros/showthread.php?t=38598)

Paz 20-12-2006 10:35:33

Instalable con contraseña?
 
Hola, tengo un problema que no se como solucionar xq es la primera vez que voy a hacer un instalable. Mi aplicación está ya hecha en delphi7. Imaginad que la aplicación es solamante un form con dos buttons (BotonUsuario, BotonAvanzado). El instalable lo estoy haciendo con InstallSheild Express. Realmente lo que necesito es que, al estar instalando la aplicación el usuario puede seleccionar entre dos setup type (usuario, avanzado). Si se selecciona 'usuario', en la aplicación que se instale, solo deberá estar visible el botonUsuario. Si se selecciona 'Avanzado', entonces durante la instalación se tendrá que pedir una contraseña, validar la contraseña y si es correcta se instalará la aplicación con los dos botones (botonUsuario,botonAvanzado) visibles.

He visto en installshield en Dialogs la opcion de pedir un serialnumber pero no sería exactamente lo que necesito xq ade+ la contraseña solo la tendría que solicitar en el caso de 'setup type: avanzado'.
Aquí perdonad mi ignorancia, pero una vez tengo los dos setup type y al instalar el usuario selecciona uno de ellos, para que la aplicación sepa que tipo de instalación se ha realizado, se usa algún fichero tipo .ini?

Estoy bastante verde en esta parte así que agradeceré cualquier sugerencia o comentario.

Muchas gracias a todos.

Lepe 20-12-2006 12:31:21

Bienvenida a los foros Paz (uso el femenino por el nick, si me equivoco, perdone usted).

Supongo que tu programa hará algo más que tener dos botones, ¿usas Bases de datos, cual? (componentes de acceso, etc).

Si no usas nada ajeno a Delphi, puede que incluso no necesites hacer el instalador, simplemente pueda funcionar directamente. Al arrancar el programa haces la pregunta al usuario y desde delphi validas todo (no necesitarías el installShield).

Para ver si funciona en otros windows, existe el vmWare (permite instalar varios S.O. de forma virtual, muy útil para estos casos).

Si quieres hacer el instalador (por ser más profesional o crear los accesos directos, el menú,etc) lamento no poder ayudarte; cuaendo lo he ncesitado he usado InnoSetup, (que es gratis y muy potente).

Usando uno u otro instalador, lo más sieguro sería dstribuir en dicho instalador 2 programas, el que tiene visible solo un botón y el que tiene ambos.En muchos casos se puede utilizar un solo ejecutable, de tal forma que el instalador escribe en un .ini o en el registro de windows el valor Modo = novato / profesional, pero en este caso sería muy fácil para un usuario avispado instalar la versión novato, modificar ese .ini y ponerlo en profesional.

Otra opción sería encriptar la contraseña y guardar el par:
Código:

Modo = avanzado
pass = "·$%"$&·%/

así se hace más difícil identificarla, pero siempre se podría copiar ese archivo desde una instalación "profesional" y pegarlo en un PC con la instalación novata, "hackeando" de esta forma la instalación.

Como ves no son pocas las pegas que pueden ocurrir. La solución puede venir según quieras más o menos "seguridad" en el programa.

Por otra parte estaría el tema de la contraseña en sí misma:
- El instalador ha de conectarse a internet para validar la contraseña.
- Se hace en base a una serie de contraseñas fijas incluidas en el propio instalador/programa.
- Se escribe un correo electrónico pidiendo una contraseña.

Soluciones hay muchas, a ver si te gusta alguna....

saludos

seoane 20-12-2006 12:46:21

Vaya, me lié a teclear código y parece que Lepe se me adelanto :D

Bueno, yo no estoy muy familiarizado con el funcionamiento del Installshield, pero se me ocurre otra forma de hacerlo. La primera vez que se ejecuta el programa, pide que se escoja entre "usuario" y "avanzado". Esto lo dejamos grabado, y ya no lo preguntamos mas veces. Algo así:

La función "SoyAvanzado" devuelve TRUE si el usuario es avanzado, y si el usuario no se había decidido anteriormente entre una de las 2 modalidades, le da la opción de escoger. Colocala en un punto adecuado de tu programa, por ejemplo en el OnCreate del formulario principal.
Código Delphi [-]
uses Registry;

const
  Clave = '1234';

function SoyAvanzado: Boolean;
var
  Str: String;
begin
  Result:= FALSE;
  with TRegistry.Create do
  try
    RootKey:= HKEY_CURRENT_USER;
    if OpenKey('\Software\TuAplicacion',TRUE) then
    begin
      Str:= EmptyStr;
      if ValueExists('Clave') then
        Str:= ReadString('Clave');
      if Str = EmptyStr then
       case MessageBox(0,'¿Eres avanzado?','Usuario',
          MB_YESNOCANCEL or MB_ICONQUESTION or MB_TASKMODAL) of
         IDYES:
           begin
             Str:= InputBox('Usuario','Introduce la clave',EmptyStr);
             if AnsiSameText(Str,Clave) then
               WriteString('Clave',Str)
             else
               ShowMessage('La clave no es correcta, la aplicacion se iniciara como usuario');
           end;
         IDNO:
           begin
             Str:= 'Usuario';
             WriteString('Clave','Usuario');
           end;
         IDCANCEL:
           ShowMessage('La aplicacion se iniciara como usuario');
       end;
      if AnsiSameText(Str,Clave) then
        Result:= TRUE;
      CloseKey;
    end;
  finally
    Free;
  end;
end;

Por ejemplo:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  BotonAvanzado.Enabled:= SoyAvanzado;
end;

Paz 27-12-2006 11:59:45

Gracias
 
Gracias por vuestras respuestas. Siento tardar tanto en responder pero he estado muy liada. Como dice ‘Lepe’, mi programa hace algo + q tener dos botones (jaaajaaa) pero para simplificar mi duda puse un ejemplo sencillo. Al final he hecho lo siguiente: Como me dijo ‘Lepe’ voy a acceder desde el instalador a dos ejecutables y en el caso que el ejecutable sea el correspondiente al modo ‘Usuario Avanzado’ entonces voy a usar la idea de ‘Seoane’. Así que gracias a los dos xq con las ideas de los dos he resuelto lo que quería. Aaah! Se me olvidaba, como mi programa no usa Base de Datos no haría falta usar un instalador, verdad?, mi única duda es que al usar la Librería Rx, podría tener algún problema si no hago un instalable?

Muchas Gracias y………Feliz Navidad y esas cosas..jeje


La franja horaria es GMT +2. Ahora son las 06:34:06.

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