![]() |
|
Модераторы: volvo877, Snowy, MetalFan |
![]()
|
|
| semiono |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 28.7.2007 Репутация: нет Всего: нет |
Inno Setup известный вероятно многим кампилятор инсталлеров в котором поддерживается
язык похожий на Pascal если я не ошибаюсь. До недавнего времени я обходился стандартным набором комманд в этом IDE. Но вот понадобилось усложнить задачи, а я практически не знаю Паскаль и собсно не знаю куда рулить. Предлагаю здесь просто обсудить процедуры и функции в рамках данного пректа. Начнём с того что я не знаю в чём разница между процедурами и функциями на мой взгляд никакой. Однако это всё более философия... А конкретно вот есть function RenameFile(const OldName, NewName: string): Boolean; Description: Attempts to change the name of the file or directory specified by OldFile to NewFile. If the operation succeeds, RenameFile returns True. If it cannot rename the file (for example, if a file called NewName already exists), it returns False. Примерчега в мануале нет, вопрос как мне применить это? Конкретно, что писать между begin и end; И нужно ли заменить описатели OldName, NewName в прототипе функции на реальные значения или это надо в разделе констант определить? Если кто-то знает мануальчик Паскаль в рамках InnoSetup, не более углубляясь в язык, я был бы рад? Потому что время на всё не хватит, а мне FASM интереснее Тут ещё вопросик, что за язык применяется в NSIS инсталлер, иногда нужно бывает его разобрать, но я там вообще нифига не пойму, бэйсик чтоли ? > begin RenameFile(ExpandConstant('C:\BSD.BIN'), ExpandConstant('C:\DBS.NBI')) end; что тут у меня не так? Это сообщение отредактировал(а) semiono - 29.7.2007, 23:53 |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Насколько я понял код правильный, но где ты его поместил?
Надо поместить в процедуре-обработчике какого-либо события, например, так: [Code] procedure DeinitializeSetup; begin RenameFile(ExpandConstant('C:\BSD.BIN'), ExpandConstant('C:\DBS.NBI')); end; Список этих обработчиков - в справке Pascal Scripting - Event Function. Я проверил - работает! -------------------- |
|||
|
||||
| semiono |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 28.7.2007 Репутация: нет Всего: нет |
Работает! Отлично!
а что делает procedure DeinitializeSetup; ?... но у меня теперь новый проблем [Files] Source: "shell32.dll"; DestDir: "{sys}"; Flags: allowunsafefiles onlyifdoesntexist; Permissions: admins-full [Code] procedure DeinitializeSetup; begin RenameFile(ExpandConstant('{sys}\shell32.dll'), ExpandConstant('{sys}\shell32.bak')); end; Как заставить код срабатывать раньше установки фалйов? Наверно процедура другая нужна? Это сообщение отредактировал(а) semiono - 1.8.2007, 04:35 |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Q: а что делает procedure DeinitializeSetup; ?.
A: .procedure DeinitializeSetup(); Вызывается непосредственно перед тем как установка прерывается. Даже если пользователь вышел из программы установки до того, как что-то было установлено. Q: Как заставить код срабатывать раньше установки фалйов? A: Вариантов много. Тебе можно использовать function InitializeSetup(): Boolean; Всё, что здесь напишешь вызывается во время инициализации установщика. или procedure InitializeWizard(); Почти тоже самое, но код описанный здесь может изменять вид страничек установщика. С помошью InitializeSetup этого сделать нельзя, т.к. к моменту вызова этой функции форма еще не существует. Можно также использовать procedure CurStepChanged(CurStep: TSetupStep); Если CurStep=ssInstall, то код выполнится до начала установки, CurStep=ssPostInstall - сразу после того, как установка закончится CurStep=ssDone непосредственно перед тем как установочник прекратит работу после успешной установки. Ну и еще вариант function NextButtonClick(CurPageID: Integer): Boolean; Вызывается, когда пользователь нажал кнопку Next на странице CurPageID. Если вернуть True, то установщик перейдет на следующую страницу; а если False останется на текужей (CurPageID). CurPageIDможет принимать значения из: wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished -------------------- |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Да, чуть не забыл - есть еще так называемый Check Parameter.
[Files] Source: "shell32.dll"; DestDir: "{sys}"; Flags: allowunsafefiles onlyifdoesntexist; Permissions: admins-full; Check: MyCheck; [Code] function MyCheck: Boolean; begin Result := False; if RenameFile(ExpandConstant('{sys}\shell32.dll'), ExpandConstant('{sys}\shell32.bak')) then Result := True; end; Здесь после соответствующей строки в [Files] я добавил Check: MyCheck; Функцию MyCheck я описал в [Code]. Суть в том, что когда установщик будет обращаться к строке в [Files] в которой есть Check Parameter он будет вызывать описанную функцию. Если та вернет True, установщик выполнит заданную строку в [Files], а ежели нет - пропустит! Ну а в самой функции - пытаемся переименовать с помощью RenameFile, если не получиться - RenameFile вернет False, а если получиться - True. -------------------- |
|||
|
||||
| semiono |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 28.7.2007 Репутация: нет Всего: нет |
Спасибо, буду переваривать! Good ! Благодарю, мне это очень важно!
Мне в данном примере более важно какраз не иметь дело с кнопками и пользователем. Так как я пытаюсь подготовить hotfixes для интеграции в дистрибутив WinXP, что должно устанавливаться как /verysilent А в хелпе какраз таки всё примеры более на диалоги расчитанны, Я так с InnoSetup подружился, что уже подумываю о Паскале, хотя мне и этого выше крыши изучить! Интересно есть ли такие места в Pascal в чём бы он уступил C или всегда есть решение и выход из ситуации? Это сообщение отредактировал(а) semiono - 1.8.2007, 15:53 |
|||
|
||||
| aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: нет Всего: 38 |
Все зависит от программиста. Не важно на каком языке писать, просто некоторые вещи проще и удобнее писать на одном языке, а некоторые на другом. По поводу InnoSetup - в него встроен очень мощный Pascal-подобный язык. И справка там отличная... -------------------- ![]() |
|||
|
||||
| semiono |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 28.7.2007 Репутация: нет Всего: нет |
Да справка там отличная! Я практически всему там по справке научился - это первый опыт такой, никогда раньше хелп ни к чему ни читал, а вот Inno самодостаточен, но всёж надо чуть чуть быть подкованным хотябы в Паскаль...
ато вопросы всёж возникають. |
|||
|
||||
![]()
|
| Правила форума "Delphi" | |
|
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |