Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 4]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 22-05-2012
Описание: Закрыто
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]


Продолжение обсуждения
Скрипты Inno Setup. Помощь и советы [часть 5]

Отправлено: 18:01, 29-08-2011

 

Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


gvshil, на тематические вопросы отвечаю в темах
сам прибиваю также, через taskkill

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:48, 09-02-2012 | #791



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 57
Благодарности: 1

Профиль | Отправить PM | Цитировать


Доброго времени суток!
Подскажите как можно проверить создана Panel или нет?

Что то типа:
Код: Выделить весь код
[*code]
VAR
  panel: TPanel;

....

PROCEDURE Test();
BEGIN
  if (panel = null) then begin
    panel := TPanel.Create(WizardForm);
  end;
END;

Отправлено: 12:07, 09-02-2012 | #792


Аватара для YURSHAT

Старожил


Сообщения: 163
Благодарности: 78

Профиль | Отправить PM | Цитировать


Цитата Gugle:
Подскажите как можно проверить создана Panel или нет? »
А не проще ли создавать панель если удовлетворяется условие для ее создания? То есть ""если мое условие удовлетворяется - panel := TPanel.Create(WizardForm)... и т.д.""

А так, какой смысл создавать элемент, который не используется?

-------
Если я знаю, что знаю мало, я добьюсь того, чтобы знать больше... В.И. Ленин
Krinkels.org - сжатие данных и создание инсталляторов

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:36, 09-02-2012 | #793


Пользователь


Сообщения: 57
Благодарности: 1

Профиль | Отправить PM | Цитировать


Нет не проще. Панелька может создаваться при выполнении нескольких не взаимосвязанных условиях.

Отправлено: 14:41, 09-02-2012 | #794


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Gugle, я в таких случаях делаю проще:
1. объявляю глобальную переменную типа integer, к примеру var panelka_goooogle : integer;
2. в InitializeSetup присваиваю ей -1 panelka_goooogle := -1// переменная неопределена
3. в процедуре где создается твоя панелька делаю уже panelka_goooogle := 1 если панелька дропается или еще какие уловия panelka_goooogle := 0, 2, 3...
4. где нужна проверка на панельку if (panelka_goooogle = 1) then... )[/off]

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:48, 09-02-2012 | #795


Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата YURSHAT:
А не проще ли создавать панель если удовлетворяется условие для ее создания? »
Полностью согласен, но видимо Gugle требуется доп. проверка...
Цитата Gugle:
Подскажите как можно проверить создана Panel или нет? »
Всё просто:
читать дальше »

Код: Выделить весь код
var
  panel: TPanel;

procedure InitializeWizard;
begin
  panel := nil; // укажем, что объект ещё не создан...
end;

procedure Test;
begin
  if panel = nil then
    begin
      panel := TPanel.Create(WizardForm);
      // и т.д. и т.п.
    end;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:29, 10-02-2012 | #796


Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата Johny777:
как в BeforeInstall записать 2 параметра? »
Вы немного путаете, две функции в одну строку нельзя.
Цитата Johny777:
в справке говорится, что через запятую, но у меня это не работает »
В справке говорится, что вы можете передать несколько параметров одной функции, которые будут разделены запятыми.
Цитата Johny777:
с этой проблемой столкнулся, когда объединял эти 2 кода »
Решается она просто:
читать дальше »

Код: Выделить весь код
[Files]
Source: "{src}\*.exe"; DestDir: {app}; BeforeInstall: AddInfo('Откиньтесь на спинку кресла и наслаждайтесь!')
Source: "{src}\*.dll"; DestDir: {app}; BeforeInstall: AddInfo('Не забудьте зарегистрироваться')
Source: E:\Program\Inno Setup 5.3.8 Ext\*; DestDir: {app}; BeforeInstall: AddInfo(''); Flags: nocompression recursesubdirs createallsubdirs

[Code]
var
  FilesMemo: TMemo;

procedure AddInfo(s: string);
var
  AFile: string;
begin
  AFile := ExpandConstant(CurrentFilename);
  if ExtractFileExt(AFile) = '' then
    FilesMemo.Lines.Add('CreateFolder: ' + RemoveBackslash(AFile))
  else
    FilesMemo.Lines.Add('Extract: ' + AFile);
  if s <> '' then
    WizardForm.StatusLabel.Caption := s;
end;

procedure InitializeWizard();
begin
  FilesMemo := TMemo.Create(WizardForm);
  with FilesMemo do
    begin
      SetBounds(ScaleX(0), ScaleY(80), ScaleX(418), ScaleY(120));
      WordWrap := False;
      Parent := WizardForm.InstallingPage;
      ScrollBars := ssVertical;
      ReadOnly := True;
      Clear;
    end;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:57, 10-02-2012 | #797


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Serega,
спасибо,
.................................................................................................... ............................
и ещё вопрос

как сделать, чтобы созданный мной сроллбокс в расширенной версии инно, в дизайнере
чтобы он прокручивался колесом мыши.
VertScrollBar.Tracking := True; не помогает
подозреваю, что не хватает какой-то функции

Последний раз редактировалось Johny777, 11-02-2012 в 14:04.


Отправлено: 17:11, 10-02-2012 | #798


Пользователь


Сообщения: 91
Благодарности: 7

Профиль | Сайт | Отправить PM | Цитировать


Цитата Serega:
можно через код...
Старый вопрос... а как?

Как "тихо" запустить определённый exe-шник, копируемый в папку установки, сразу же после его успешного копирования и потом закрыть его "автоматом", или после распаковки всех файлов приложения, НО ДО ЗАВЕРШЕНИЯ УСТАНОВКИ?

Ничего "криминального" - этот "файл" является небольшой родной "утилиткой", которая собирает определённые сведения о системе и прописывает необходимые данные в реестр в ветку устанавливаемого приложения.
Если есть какой-нибудь другой способ, то тоже неплохо.

Пробовал в секции Run - сначала запустить этот файл, а потом, убить его с помощью батника, в котором прописано "taskkill /f /im MyProg.exe" - НЕ получается, прога запускается и висит, батник не запускается, пока прогу НЕ закроешь, а мне ведь и НАДО ЕЁ закрыть!!!
Если поставить флаг "nowait", то он действительно НЕ ждёт и не даёт файлу даже запуститься...

читать дальше »
Почему-то НЕ работает флаг "runhidden", он не скрывает окно приложения и даже НЕ сворачивает с флагом "runminimized".
Этот флаг работает только для скрытия консольных окон что ли? Их он скрывает без проблем.
Помогите, пожалуйста!!! Может через секцию Code как-то можно сделать?


Пробовал так, тоже не получилось:

читать дальше »
Код: Выделить весь код
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@{app}\ISTask.dll stdcall delayload;

function KillTask(ExeFileName: string): Integer;
  external 'KillTask@{app}\ISTask.dll stdcall delayload';

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode:Integer;
begin
if CurStep = ssPostInstall then
begin
Exec(ExpandConstant('{app}\MyProg.exe'), '', ExpandConstant('{app}'), SW_Hide, ewWaitUntilTerminated, ResultCode);
  begin
    if RunTask('MyProg.exe', false) then
      KillTask('MyProg.exe');
    UnloadDll(ExpandConstant('{app}\ISTask.dll'));
  end;
end;


И так: Exec('taskkill', '/f /im MyProg.exe', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);

А также можно ли, чтобы данные в реестр вносились "в самом начале" или же "2 раза" или "по частям". Нужно, чтобы выбранный путь установки (папка назначения), внеслись в реестр ДО завершения установки.

Отправлено: 13:32, 11-02-2012 | #799


Пользователь


Сообщения: 91
Благодарности: 7

Профиль | Сайт | Отправить PM | Цитировать


Serega

Вы как-то делали "фейковый" индикатор процесса, по типу IE. Есть ли сейчас какие-нибудь варианты и наработки?
Нужна индикация процесса во время установки дополнительного ПО - установка долгая минут 15...
Можете ли Вы "доработать" Ваш индикатор, "под секцию Code", а не "под Run"?

читать дальше »
Код: Выделить весь код
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';

const
  PBM_SETMARQUEE = $040A;
  GWL_STYLE      = -16;
  PBS_MARQUEE    = $08;

var
  AnimatePb: TNewProgressBar;

procedure CreateAnimatePb;
begin
  AnimatePb := TNewProgressBar.Create(WizardForm);
  with AnimatePb do
    begin
      Parent := WizardForm.InstallingPage;
      SetBounds(WizardForm.ProgressGauge.Left, WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + ScaleY(-21),
                WizardForm.ProgressGauge.Width, WizardForm.ProgressGauge.Height);
      SetWindowLong (AnimatePb.Handle, GWL_STYLE, (GetWindowLong (AnimatePb.Handle, GWL_STYLE) or PBS_MARQUEE));
      SendMessage(AnimatePb.Handle, PBM_SETMARQUEE, 1, 20);
    end;
end;

procedure AnimatePbMsg(const msg: string);
begin
  if AnimatePb = nil then
    CreateAnimatePb;
  WizardForm.FilenameLabel.Caption := msg;
end;

procedure AnimatePbFree;
begin
  if AnimatePb <> nil then
    begin
      AnimatePb.Free;
      AnimatePb := nil;
    end;
end;


И действительно он НЕ работает на некоторых темах (скорее всего из-за того что они не подписанные/не официальные)... Работает на "стандартной" во всех ОС и на "Классической" - но бегунок двигается намного медленнее...

Последний раз редактировалось TROY Diamond, 11-02-2012 в 15:18.


Отправлено: 14:17, 11-02-2012 | #800



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Test ferget Тест-форум 0 24-08-2011 01:25
test ! ! Aaa ! ! Тест-форум 0 23-04-2011 11:29
test Santa aka Snt Тест-форум 0 16-04-2011 22:35
test xolod. Программное обеспечение Linux и FreeBSD 0 19-04-2009 21:03
Test memory KEugeNik Хочу все знать 11 23-11-2003 23:11




 
Переход