Shegorat
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору [code] var MyNewPage: TWizardPage; MyRadioBtn_1, MyRadioBtn_2: TRadioButton; function KillTaskA(ExeFileName: string): Integer; //Проверка запущеной программы и завершение, если процесс запущен external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly'; function RunTaskA(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly'; procedure GetMyNewPage(); //Новая страница инсталятора с радиобаттонами begin MyNewPage := CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ''); MyRadioBtn_1 := TRadioButton.Create(WizardForm); with MyRadioBtn_1 do begin Top := ScaleY(50); Width := ScaleX(150); Height := ScaleY(13); Caption := ExpandConstant('{cm:MyRadioCaption_1}'); Checked := True; Parent := MyNewPage.Surface; end; MyRadioBtn_2 := TRadioButton.Create(WizardForm); with MyRadioBtn_2 do begin Top := ScaleY(120); Width := ScaleX(150); Height := ScaleY(13); Caption := ExpandConstant('{cm:MyRadioCaption_2}'); Parent := MyNewPage.Surface; end; end; procedure InitializeWizard(); //привязка действия к радибаттонам begin GetMyNewPage(); end; function GetRadio_1Checked(): Boolean; begin Result := MyRadioBtn_1.Checked; end; function GetRadio_2Checked(): Boolean; begin Result := MyRadioBtn_2.Checked; end; procedure MyFunction(Sender: TObject); //Запрет установки программы в определенный каталог var S: String; begin S := ExtractFilePath(WizardForm.DirEdit.Text); SetLength(S, Length(S)-1); if IsWin64 then begin if (Pos(ExpandConstant('{pf32}'), S) > 0) then begin MsgBox('Программу нельзя устанавливать в' + #13#10 + S, mbInformation, MB_OK); WizardForm.DirEdit.Text := ExpandConstant('{pf64}'); end; WizardForm.DirEdit.Text := AddBackSlash(WizardForm.DirEdit.Text); end end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); //Удаление - проверка папки после удаления, и удаление ее если присутствует var Res: Integer; begin case CurUninstallStep of usUninstall: begin UnloadDLL(ExpandConstant('{app}\ISTask.dll')); end; usPostUninstall: begin //Проверяем присутствие папки после удаления If DirExists(ExpandConstant('{app}')+'') then //Создаем диалог с тремя кнопками case MsgBox('Папка "'+ExpandConstant('{app}')+'" не пуста.'#13#13 + '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 + '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 + '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of IDYES: begin if not DelTree(ExpandConstant('{app}')+'', True, True, True) then MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK); end; IDNO: begin if not ShellExec('open', ExpandConstant('{app}')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK); end; IDCANCEL: begin end; end; // Удаление - проверка папки после удаления, и удаление если присутствует - ЕЩЕ РАЗ, но другую папку // Проверяем присутствие папки после удаления If DirExists(ExpandConstant('{userappdata}\User Data')+'') then //Создаем диалог с тремя кнопками case MsgBox('Папка "'+ExpandConstant('{userappdata}\')+'" не пуста.'#13#13 + '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 + '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 + '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of IDYES: begin if not DelTree(ExpandConstant('{userappdata}\')+'', True, True, True) then MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK); end; IDNO: begin if not ShellExec('open', ExpandConstant('{userappdata}\')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK); end; IDCANCEL: begin end; end; end; end; end; function NextButtonClick(CurPageID: Integer): Boolean; //Невозможность продолжения установки - без выбора хотя бы одного компонента begin Result := True; if (CurPageID = wpSelectComponents) and (IsComponentSelected('d') = False) and (IsComponentSelected('d\a') = False) and (IsComponentSelected('d\b') = False) and (IsComponentSelected('d\c') = False) and (IsComponentSelected('d\d') = False) and (IsComponentSelected('d\e') = False) and (IsComponentSelected('d\f') = False) and (IsComponentSelected('d\g') = False) and (IsComponentSelected('d\a') = False) then begin MsgBox('Не выбрано ни одиного протокола для установки!!!', mbInformation, MB_OK); Result := False; end; end; procedure InitializeUninstallProgressForm(); begin if RunTaskA('mir.exe', false) then if MsgBox(CustomMessage('CloseApp'), mbConfirmation, MB_YESNO) = IDYES then KillTaskA('mir.exe') else Abort; end; |