Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> InnoSetup, Интегрированный Pascal 
:(
    Опции темы
semiono
Дата 29.7.2007, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Inno Setup известный вероятно многим кампилятор инсталлеров в котором поддерживается
язык похожий на Pascal если я не ошибаюсь.
До недавнего времени я обходился стандартным набором комманд в этом IDE.
Но вот понадобилось усложнить задачи, а я практически не знаю Паскаль и собсно не знаю куда рулить.
Предлагаю здесь просто обсудить процедуры и функции в рамках данного пректа.
Начнём с того что я не знаю в чём разница между процедурами и функциями  smile 
на мой взгляд никакой. Однако это всё более философия... А конкретно вот есть
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 интереснее smile

Тут ещё вопросик, что за язык применяется в NSIS инсталлер, иногда нужно бывает его разобрать,
но я там вообще нифига не пойму, бэйсик чтоли ?

>
begin
RenameFile(ExpandConstant('C:\BSD.BIN'), ExpandConstant('C:\DBS.NBI'))
end;
что тут у меня не так?

Это сообщение отредактировал(а) semiono - 29.7.2007, 23:53
PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 30.7.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: нет
Всего: 160



Насколько я понял код правильный, но где ты его поместил?
 
Надо поместить в процедуре-обработчике какого-либо события, например, так:

[Code]
procedure DeinitializeSetup;
begin
  RenameFile(ExpandConstant('C:\BSD.BIN'), ExpandConstant('C:\DBS.NBI'));
end;

Список этих обработчиков - в справке Pascal Scripting - Event Function.

Я проверил - работает!  smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
semiono
Дата 31.7.2007, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 1.8.2007, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 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 










--------------------
PM MAIL WWW GTalk Jabber   Вверх
kemiisto
Дата 1.8.2007, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 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.
 
  


--------------------
PM MAIL WWW GTalk Jabber   Вверх
semiono
Дата 1.8.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Спасибо, буду переваривать! Good ! Благодарю, мне это очень важно!

Мне в данном примере более важно какраз не иметь дело с кнопками и пользователем.
Так как я пытаюсь подготовить hotfixes для интеграции в дистрибутив WinXP,
что должно устанавливаться как /verysilent 
А в хелпе какраз таки всё примеры более на диалоги расчитанны,  smile 

Я так с InnoSetup подружился, что уже подумываю о Паскале, хотя мне и этого выше крыши изучить!
Интересно есть ли такие места в Pascal в чём бы он уступил C или всегда есть решение и выход из ситуации?

Это сообщение отредактировал(а) semiono - 1.8.2007, 15:53
PM MAIL ICQ Jabber   Вверх
aktuba
Дата 2.8.2007, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Цитата

Интересно есть ли такие места в Pascal в чём бы он уступил C или всегда есть решение и выход из ситуации?


Все зависит от программиста. Не важно на каком языке писать, просто некоторые вещи проще и удобнее писать на одном языке, а некоторые на другом. По поводу InnoSetup - в него встроен очень мощный Pascal-подобный язык. И справка там отличная...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
semiono
Дата 5.8.2007, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Да справка там отличная! Я практически всему там по справке научился - это первый опыт такой, никогда раньше хелп ни к чему ни читал, а вот Inno самодостаточен, но всёж надо чуть чуть быть подкованным хотябы в Паскаль...
ато вопросы всёж возникають.
smile
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.