Ветеран
Сообщения: 1640
Благодарности: 536
|
Профиль
|
Отправить PM
| Цитировать
Rikill,
лишняя CheckPassword потому что
Код: 
If Setup finds the CheckPassword event function in the Pascal script, it automatically displays the Password page and calls CheckPassword to check passwords. Return True to accept the password and False to reject it.
вот так надо + в CurPageChanged добавить 2 строчки для нажатия кнопки Далее
Код: 
;2. В процедуре InitializeSetup, заполняется массив символов, которые могут использоваться для пароля (а могут и не использоваться).
;3. В процедуре InitializeWizard, поле ввода пароля делается скрытым, что немного прорежает ряды школьников, пытающихся вскрыть ваш инсталлятор.
;4. Как заполняется поле ввода пароля, можно увидеть в процедуре CurPageChanged. Это, наверно, самый простой вариант, но и он не дает увидеть пароль в коде. Еще лучше, если использовать функции и циклы.
;5. Еще одна фишка, это использование в пароле функции с участием GetDateTimeString. При каждом клике на кнопку <Далее>, в переменную сохраняется время. В пароле используется разница между сохраненными и текущими секундами. Так как при нормальной инсталляции, это происходит автоматически и очень быстро, разница практически всегда равна нулю. А вот если проходить в пошаговом режиме (под отладчиком), разница будет не нулевая, и введенный пароль будет не верен. Откровенно говоря, это слабая защита (так как человека, знакомого с такими методами взлома, это не остановит), но все-таки притормозить может.
;6. И, наконец, сразу после проверки пароля, в функции CheckPassword страница PasswordPage ликвидируется.
;Все. Не стоит думать, что этот код нельзя вскрыть. Это только затруднит вскрытие для неподготовленного человека. Но в 99% случаев, этого достаточно.
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes
Encryption=yes
Password=Inn0
[*Code]
var
str: string;
MyArray: array of Char;
function InitializeSetup(): Boolean;
begin
MyArray:= ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0','!','@','#','$','%','^','&','*','(',')'];
Result:= True;
end;
//function CheckPassword(Password: String): Boolean;
//begin
// WizardForm.PasswordEdit.Text:= 'Вот и нет пароля';
// WizardForm.PasswordPage.Free;
//Result:= True;
//end;
procedure InitializeWizard();
begin
// WizardForm.PasswordEdit.Visible:= False;
WizardForm.PasswordEdit.Text:= '';
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
str:= GetDateTimeString('ss', #0, #0);
Result:= True;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpPassword then
begin
WizardForm.PasswordEdit.Text:= MyArray[8]+MyArray[39]+MyArray[39] + IntToStr(StrToInt(str) - StrToInt(GetDateTimeString('ss', #0, #0)));
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
// WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;
|