Vaya, me lié a teclear código y parece que Lepe se me adelanto
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;