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

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

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

Ветеран


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


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

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


Изменения
Автор: jameszero
Дата: 08-11-2010
Описание: тема закрыта
Лимит страниц.
Тема закрыта.
Продолжение по ссылке Скрипты Inno Setup. Помощь и советы [часть 3]




Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


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

  • Inno Script Generator - ещё один редактор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать;

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы. Официальный сайт - недоступен.
    Последняя версия: 2.0.8 [12.11.2006] - Страница с зеркалами;

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

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

  • InnoSetup Script Joiner - Программа для объединения нескольких скриптов InnoSetup в один;

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


Ссылка на архив предыдущей темы (также можно скачать из вложения)

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


Отправлено: 22:06, 23-08-2009

 

Аватара для Молодой

Новый участник


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

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


Freearc архиватор

-------
Да поможет мне CTRL + ALT + DELETE


Отправлено: 12:48, 20-12-2009 | #721



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

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


Новый участник


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

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


Здравствуйте. Поиском не нашел того что нужно, поэтому вопрос:
Можно ли сделать так чтобы после установки программы, появлялось окно, в котором было несколько определенных пунктов, и возможность выбора одного из них. При выборе какого либо пункта, определенный файл копировался бы из папки скажем {app}\Папка\файл.ini в корневую папку программы?

Если кто встречал рпимер скрипта, поделитесь пожалуйста.

И еще последний вопрос, можно ли сделать чтобы в окне выбора компонентов( какие будут устанавливаться, а какие нет), при наведении на какой либо компонент, рядом появлялась подсказка (комментарий) для этого компонента, в котрой написано пояснение для чего нужен он? Наподобие как в нсис

Отправлено: 14:03, 20-12-2009 | #722


Аватара для A1EXXX

Старожил


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

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


Молодой, там и нет такой строчки, это задаётся вручную: 1) скриптом:
читать дальше »
Код: Выделить весь код
[Code]
var
NeedSize:Integer; FreeMB, TotalMB: Cardinal; NeedSpaceLabel,FreeSpaceLabel: TLabel;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ IntToStr(NeedSize)+ ' MB';
end;

procedure InitializeWizard();
begin
NeedSize := 630000;

WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(202);
Width := ScaleX(209);
Height := ScaleY(13);
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
end;
end;

2) Обычным редактированием Russian.isl (Default.isl)


Pilotfcsm, по поводу второго вопроса - в шапке есть Коллекция скриптов, там это есть.

Отправлено: 15:00, 20-12-2009 | #723


Аватара для YURSHAT

Старожил


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

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


Цитата Pilotfcsm:
И еще последний вопрос, можно ли сделать чтобы в окне выбора компонентов( какие будут устанавливаться, а какие нет), при наведении на какой либо компонент, рядом появлялась подсказка (комментарий) для этого компонента, в котрой написано пояснение для чего нужен он? Наподобие как в нсис »
Пример
Код: Выделить весь код
[Setup]
AppName=AppName
AppVerName=AppVerName
CreateAppDir=false

[Files]
Source: compiler:WizModernSmallImage.bmp; DestDir: {tmp}; Flags: dontcopy
Source: compiler:WizModernSmallImage-IS.bmp; DestDir: {tmp}; Flags: dontcopy

[Code_]
Var
  Page: TWizardPage;
  Text1,Text2,Text3,Text4: TNewStaticText;
  Panel: TPanel;
  ListBox: TListBox;
  Check1,Check2: TCheckBox;
  NoChecks,Label1,Label2: TLabel;
  Image: TBitmapImage;

Function Checked1: Boolean;
begin
  Result:=Check1.Checked
end;

Function Checked2: Boolean;
begin
  Result:=Check2.Checked
end;

Procedure Check1OnClick (Sender: TObject);
begin
  Check1.Checked:=Not(Check1.Checked)
end;

Procedure Check2OnClick (Sender: TObject);
begin
  Check2.Checked:=Not(Check2.Checked)
end;

procedure Check1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание первого компонента'
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage.bmp'))
Image.Visible:=True
end;

procedure Check2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание второго компонента'
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage-IS.bmp'))
Image.Visible:=True
end;

procedure NoChecksMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=False
Text4.Caption:='Наведите курсор мыши на название компонента, чтобы прочесть его описание.'
Image.Visible:=False
end;

Procedure InitializeWizard();
begin
  ExtractTemporaryFile('WizModernSmallImage.bmp')
  ExtractTemporaryFile('WizModernSmallImage-IS.bmp')

  Page:=CreateCustomPage(2, 'Компоненты устанавливаемой программы', 'Выберите компоненты, которые вы хотите установить.')

  Text1:=TNewStaticText.Create(Page)
  Text1.Left:=0
  Text1.Top:=0
  Text1.Width:=417
  Text1.Height:=28
  Text1.AutoSize:=False
  Text1.WordWrap:=True
  Text1.Caption:='Выберите компоненты программы, которые вы хотите установить. Нажмите на кнопку "Далее" для продолжения.'
  Text1.Parent:=Page.Surface

  Text2:=TNewStaticText.Create(Page)
  Text2.Left:=0
  Text2.Top:=63
  Text2.Width:=130
  Text2.Height:=42
  Text2.AutoSize:=False
  Text2.WordWrap:=True
  Text2.Caption:='Выберите компоненты программы для установки:'
  Text2.Parent:=Page.Surface

  Image:=TBitmapImage.Create(WizardForm)
  Image.Left:=0
  Image.Top:=Text2.Top + Text2.Height + 10;
  Image.Width:=55
  Image.Height:=55
  Image.Parent:=Page.Surface

  Panel:=TPanel.Create(Page)
  Panel.Left:=287
  Panel.Top:=60
  Panel.Width:=130
  Panel.Height:=160
  Panel.BevelInner:=bvLowered
  Panel.Parent:=Page.Surface

  Text3:=TNewStaticText.Create(Page)
  Text3.Left:=293
  Text3.Top:=54
  Text3.Font.Color:=clBlue
  Text3.Caption:='Описание'
  Text3.Parent:=Page.Surface

  Text4:=TNewStaticText.Create(Page)
  Text4.Left:=4
  Text4.Top:=10
  Text4.Width:=122
  Text4.Height:=140
  Text4.AutoSize:=False
  Text4.WordWrap:=True
  Text4.Parent:=Panel

  NoChecks:=TLabel.Create(Page)
  NoChecks.Width:=WizardForm.Width
  NoChecks.Height:=WizardForm.Height
  NoChecks.Autosize:=False
  NoChecks.Transparent:=True
  NoChecks.OnMouseMove:=@NoChecksMouseMove
  NoChecks.Parent:=Page.Surface

  ListBox:=TListBox.Create(Page)
  ListBox.Left:=135
  ListBox.Top:=60
  ListBox.Width:=140
  ListBox.Height:=160
  ListBox.Parent:=Page.Surface

  Check1:=TCheckBox.Create(Page)
  Check1.Left:=2
  Check1.Top:=0
  Check1.Checked:=True
  Check1.Parent:=ListBox

  Check2:=TCheckBox.Create(Page)
  Check2.Left:=2
  Check2.Top:=16
  Check2.Checked:=True
  Check2.Parent:=ListBox

  Label1:=TLabel.Create(Page)
  Label1.Left:=16
  Label1.Top:=2
  Label1.Caption:='Компонент 1'
  Label1.OnClick:=@Check1OnClick
  Label1.OnMouseMove:=@Check1MouseMove
  Label1.Parent:=Check1

  Label2:=TLabel.Create(Page)
  Label2.Left:=16
  Label2.Top:=2
  Label2.Caption:='Компонент 2'
  Label2.OnClick:=@Check2OnClick
  Label2.OnMouseMove:=@Check2MouseMove
  Label2.Parent:=Check2
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:06, 20-12-2009 | #724


Ветеран


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

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


Цитата ADremLIN:
то существует ли способ его обойти??? »
Я раньше не обращал на это внимание, но действительно получается очень интересно.
Каким образом это обойти - изменить пути реализации скрипта, т.е. я как понял вы хотите использовать эти переменные в каком-то батнике, если да, то можно создавать батник программно, с помощью SaveStringToFile или SaveStringsToFile и записывать туда уже действительный путь.

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


Отправлено: 15:37, 20-12-2009 | #725


Новый участник


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

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


Serega,

Пример с батником - всего лишь для иллюстрации проблемы...

Настоящая задача - Установить Apache Http Server при помощи инсталлятора, созданного в Inno Setup'е. Зарегистрировать в качестве службы Windows, и запустить его по выбору пользователя по окончании инсталляции.

В качестве одного из дополнительных плагинов к Апачу - mod_wsgi (работает с программами написанными на языке Питон), который требует наличия в %PATH% пути к установленному в системе Питону, а конкретней - к python25.dll, или эта либа должна лежать рядом с httpd.exe.

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

С помощью ChangesEnvironment=yes внутреннее, для инсталлятора, системное окружение, а в часности пути поиска - почему-то не обновляются. Если я правильно понимаю, все порожаемые инсталлятором процессы наследуют его системное окружение, и поэтому запускаются в старом, не обновленном системном окружении, со всеми вытекающими отсюда последствиями...

В моем случае при завершении работы инсталлятора апач не стартует, так как его модуль mod_wsgi не находит, свежеустановленную, но лежащую в другой папке python25.dll, хотя пути до нее в системе уже обновились. (что я надеюсь наглядно проиллюстрировал в примере выше).

Казалось бы все вышесказанное - СТРАШНЫЙ БАГ Inno Setup'а, который не позволяет решить поставленную задачу!!!

Но... Слава Великому и Ужасному ГУГЛЮ!!! Нашелся способ обойти проблему...

Воспользовавшись вот этим: Уважаемый тов. MK сообщил 21-02-2001 в 02:58, мне удалось запустить апача со всеми нужными ему и его модулям библиотеками, вне зависимости от системной переменной %PATH%.

Цитата:
... если исполняемый файл и используемые им библиотеки находятся в различных каталогах, то в раздел HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths нужно добавить ключ, соответствующий имени Вашей программы без пути, например BUZZER.EXE, и в этот ключ добавить:

1. значение по умолчанию, соответствующее полному имени файла (с путем)

2. строковый параметр Path, определяющий каталоги с файлами в формате задания переменной Path в autoexec.bat

Теперь при запуске программы значение Path будет добавлено к системной переменной Path ...
Каюсь, что до этого я не знал об этой возможности в Windows

Итак пример, показывающий решение проблемы, подобной моей :

Код: Выделить весь код
[Registry]
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\python.exe"; ValueType: string; ValueData: "{app}\python.exe"; Flags: uninsdeletekey  
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\python.exe"; ValueType: string; ValueName: "Path"; ValueData: "{app}\python"; Flags: uninsdeletekey  

[Run]
Filename: "python.exe"; WorkingDir: "{app}"; Description: Start {#MyAppName}; Components: a; Flags: shellexec postinstall waituntilterminated
Здесь python.exe лежит в {app}, а нужная ему либа в {app}\python
* При запуске вашей программы из секции [Run], флаг shellexec - включать обязательно! (без него не работает).
* Если запуск приложения происходит из секции [_Code] - обязательно используйте функцию shellexec('Open', ...).

Надеюсь мои изыскания будут полезны кому-нибудь ещё, ведь "умные люди" должны учиться на чужих ошибках...

Всем удачных инсталлов!
Сергей.

Последний раз редактировалось ADremLIN, 20-12-2009 в 22:01.

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

Отправлено: 21:40, 20-12-2009 | #726


Новый участник


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

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


Вложения
Тип файла: zip Скрипт.zip
(7.6 Kb, 15 просмотров)

Как соеденить мой скрипт с архивом The Club.arc чтобы распаковалось и чтобы было врямя до завершения установки? Помогите! Я сам начал делать но у меня всегда ошибки вылетатю.

скрипт прикрепил

Скрипт а-ля BlackSelf от YURSHAT

Отправлено: 22:46, 20-12-2009 | #727


Аватара для Dark Engel

Старожил


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

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


К сожалению никто по моему вопросику не ответил посему копаю сам. Нарыл такую функцию function WizardSilent: Boolean;

Решил попробовать таким образом:

читать дальше »
Код: Выделить весь код
//проверка на установленность и версию.
function DetectInstall(ProgName: string; ver: Integer): Boolean;
var
  Names: TArrayOfString;
  ResultDWord: Cardinal;
  i: Integer;
  msg: string;
begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***\***', Names) then
    begin
      for i:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[i]) then
          begin
            RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'Software\***\***', Names[i], ResultDWord);
            if ResultDWord > ver then
              begin
                if WizardSilent then
                 Result:= False
                else
                 msg:= 'Установленная версия *** новее.';
                 Result:= False;
                 MsgBox(msg, mbError, MB_OK);
              end
            else
            if ResultDWord = ver then
              begin
                Result:= True;
              end;
            Break;
          end;
    end;
//Запись версии устанавливаемой программы.
RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'Software\***\***', '***', 3);
end;


По логике если инсталяция silent то просто Result:= False а если обычная то

msg:= 'Установленная версия *** новее.';
Result:= False;
MsgBox(msg, mbError, MB_OK);

Но почему то в silent появляется пустое окошечко с кнопкой OK.

Вопрос снимается, решил сам. Если кому нужно прикладываю готовый код

читать дальше »
Код: Выделить весь код
//проверка на установленность и версию.
function DetectInstall(ProgName: string; ver: Integer): Boolean;
var
  Names: TArrayOfString;
  ResultDWord: Cardinal;
  i: Integer;
  msg: string;
begin
  Result:= True;
  if RegGetValueNames(HKEY_LOCAL_MACHINE, 'Software\***\***', Names) then
    begin
      for i:= 0 to GetArrayLength(Names)-1 do
        if Lowercase(ProgName) = Lowercase(Names[i]) then
          begin
            RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'Software\***\***', Names[i], ResultDWord);
            if ResultDWord > ver then
              begin
                if not WizardSilent then
                 Begin
                 msg:= 'Установленная версия *** новее.';
                 Result:= False;
                 MsgBox(msg, mbError, MB_OK);
                 end
                else
                 Result:= False
              end
            else
            if ResultDWord = ver then
              begin
                Result:= True;
              end;
            Break;
          end;
    end;
//Запись версии устанавливаемой программы.
RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'Software\***\***', '***', 3);
end;

-------

"Чем больше мы умнеем, тем больше понимаем что мы глупцы."


Последний раз редактировалось Dark Engel, 21-12-2009 в 13:40.


Отправлено: 11:55, 21-12-2009 | #728


Аватара для YURSHAT

Старожил


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

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


Скрипт InnoSetup для распаковки архивов FreeArc

Версия 3.5 от 21-12-2009
- поддержка опций -ap/-ld/-cfg в FreeArcExtract()
- ускорена распаковка при большом количестве wav-файлов (метод TTA)
- можно передавать NULL в качестве первого параметра (callback) в FreeArcExtract()
- исправлена ошибка: обрабатывались опции после '--'

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


Последний раз редактировалось YURSHAT, 29-01-2010 в 03:11.

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

Отправлено: 17:07, 21-12-2009 | #729


Ветеран


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

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


YURSHAT, ЛС посмотрите пожалуйста.

Отправлено: 01:41, 22-12-2009 | #730



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Inno Setup .:[все вопросы]:. Mchik Автоматическая установка приложений 1329 23-08-2009 20:13
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход