Защищенное паролем удаление с помощью Inno Setup

Я делаю установщик с помощью Inno Setup. Я хочу защитить паролем удаление. Итак, мой план - запросить пароль для удаления во время установки и сохранить его в файл. При удалении спросите пароль у пользователя и сравните пароли.

Я не мог найти способ разрешить пользователю вводить пароль при удалении, есть ли он?


person Navaneeth    schedule 05.03.2010    source источник
comment
Вы нашли какое-нибудь решение, я хочу реализовать такую ​​же функцию.   -  person Jay Patel    schedule 27.09.2018


Ответы (3)


Некоторые пользователи Inno Setup требуют, чтобы у пользователя, который хочет удалить программное обеспечение, запрашивался пароль, прежде чем это станет возможным. Например, антивирусное программное обеспечение может быть кандидатом на это требование. В приведенном ниже коде показано, как создать форму, запросить пароль и удалить программное обеспечение, только если пароль правильный. Этот способ очень слабый, пароль узнать несложно. Таким образом, тот, кто хочет использовать эту стратегию для защиты своего программного обеспечения от удаления, должен написать что-то более безопасное. Если пользователь хочет удалить и не знает, файлы паролей все равно могут быть удалены из папки приложения. В этом примере пароль для удаления - 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;

Источник: http://www.vincenzo.net/isxkb/index.php?title=Require_an_uninstallation_password

person vicsar    schedule 02.06.2016

Защита паролем при удалении не работает, поскольку пользователь может просто вручную удалить ваши файлы. Это означает, что в Inno Setup действительно нет встроенной опции для этого.

Если вы все равно хотите попробовать это, вы можете использовать функцию события InitializeUninstall, чтобы запросить у пользователя пароль и вернуть False при несоответствии. Это прервет деинсталлятор.

person mlaan    schedule 25.03.2010
comment
Мне не удалось найти способ разрешить пользователю вводить пароль при удалении. (Я пытался использовать CreateInputQueryPage, но он выдавал ошибку). Как принять ввод от пользователя при удалении? - person Navaneeth; 05.04.2010

Вы можете проверить функцию «CheckPassword» в справке Inno Setup.

person Hps    schedule 30.10.2010
comment
CheckPassword используется только в программе установки, а не в программе удаления. - person Martin Prikryl; 03.06.2016