passwords - Desinstalación protegida con contraseña usando Inno Setup
inno-setup uninstaller (3)
Estoy haciendo un instalador usando Inno Setup. Quiero proteger con contraseña la desinstalación. Así que mi plan es pedir la contraseña de desinstalación durante la instalación y guardarla en un archivo. Al desinstalar, solicite la contraseña del usuario y compare las contraseñas.
No pude encontrar la manera de permitir que el usuario ingrese la contraseña durante la desinstalación, ¿hay alguna?
Las desinstalaciones de protección con contraseña no funcionan, ya que el usuario puede simplemente eliminar manualmente sus archivos. Esto significa que de hecho no hay una opción incorporada en Inno Setup para hacer esto.
Si desea intentarlo de todos modos, podría usar una función de evento InitializeUninstall para pedirle al usuario una contraseña y devolver False en la discrepancia. Esto abortará el desinstalador.
Puede verificar la función "CheckPassword" en la ayuda de Inno Setup.
Algunos usuarios de Inno Setup requieren que al usuario que desea desinstalar el software se le pida una contraseña antes de que esto sea posible. El software antivirus puede ser un candidato para este requisito, por ejemplo. El siguiente código muestra cómo crear un formulario, pedir una contraseña y desinstalar el software solo si la contraseña es correcta. Este método es muy débil, es fácil descubrir la contraseña. Entonces, alguien que quiera usar esta estrategia para proteger su software de la desinstalación necesita codificar algo más seguro. Si el usuario desea desinstalar y no sabe, los archivos de contraseña se pueden eliminar de todos modos desde la carpeta de la aplicación. En este ejemplo, la contraseña de desinstalación es removeme .
[Setup]
AppName=UninsPassword
AppVerName=UninsPassword
DisableProgramGroupPage=true
DisableStartupPrompt=true
DefaultDirName={pf}/UninsPassword
[Code]
function AskPassword(): Boolean;
var
Form: TSetupForm;
OKButton, CancelButton: TButton;
PwdEdit: TPasswordEdit;
begin
Result := false;
Form := CreateCustomForm();
try
Form.ClientWidth := ScaleX(256);
Form.ClientHeight := ScaleY(100);
Form.Caption := ''Uninstall Password'';
Form.BorderIcons := [biSystemMenu];
Form.BorderStyle := bsDialog;
Form.Center;
OKButton := TButton.Create(Form);
OKButton.Parent := Form;
OKButton.Width := ScaleX(75);
OKButton.Height := ScaleY(23);
OKButton.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 50);
OKButton.Top := Form.ClientHeight - ScaleY(23 + 10);
OKButton.Caption := ''OK'';
OKButton.ModalResult := mrOk;
OKButton.Default := true;
CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - ScaleX(75 + 50);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := ''Cancel'';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
PwdEdit := TPasswordEdit.Create(Form);
PwdEdit.Parent := Form;
PwdEdit.Width := ScaleX(210);
PwdEdit.Height := ScaleY(23);
PwdEdit.Left := ScaleX(23);
PwdEdit.Top := ScaleY(23);
Form.ActiveControl := PwdEdit;
if Form.ShowModal() = mrOk then
begin
Result := PwdEdit.Text = ''removeme'';
if not Result then
MsgBox(''Password incorrect: Uninstallation prohibited.'', mbInformation, MB_OK);
end;
finally
Form.Free();
end;
end;
function InitializeUninstall(): Boolean;
begin
Result := AskPassword();
end;
Fuente: http://www.vincenzo.net/isxkb/index.php?title=Require_an_uninstallation_password