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

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

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

Ветеран


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


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

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


Изменения
Автор: Serega
Дата: 13-08-2011
Вложения
Тип файла: 7z Inno Setup [все вопросы] часть 1.7z
(1.34 Mb, 900 просмотров)
Тип файла: 7z Inno Setup [все вопросы] часть 2.7z
(3.12 Mb, 798 просмотров)
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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] - Скачать;

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

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


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

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


Отправлено: 00:28, 04-11-2010

 

Аватара для Gnom_aka_Lexander

Ветеран


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

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


R.i.m.s.k.y.,
Цитата R.i.m.s.k.y.:
SaveStringsToFile(ExpandConstant('{src}\www.txt' »
src - у тебя не на сменном носителе случайно?

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.


Отправлено: 16:17, 27-04-2011 | #1451



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

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


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

Ветеран


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

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


Цитата Лександер:
src - у тебя не на сменном носителе случайно »
нет, ошибка "Out of range" в строке присваивания S[i] переменной, я ж написал

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


Отправлено: 16:21, 27-04-2011 | #1452


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

Ветеран


Contributor


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

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


Цитата R.i.m.s.k.y.:
не понимаю, почему не работает »
R.i.m.s.k.y., а массив-то хоть существует? Строка SetArrayLength(S, 5) есть?

Цитата Лександер:
Можно-ли получить текст надписи PageNameLabel и PageDescriptionLabel со строго определенной страницы? Чтобы показать их на другой странице. »
Лександер, самое простое тексты прописать в [Messages]:
Код: Выделить весь код
[Messages]
WizardSelectDir=blablabla
SelectDirDesc=blabla
...
или использовать SetupMessage (при необходимости StringChangeEx для обработки результата):
Код: Выделить весь код
MsgBox(SetupMessage(msgWizardSelectDir), mbInformation, MB_OK);
MsgBox(SetupMessage(msgSelectDirDesc), mbInformation, MB_OK);
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:33, 27-04-2011 | #1453


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


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

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


Как получить из реестра месторасположение Firefox (если он установлен) и выполнить действия, аналогичные этому бат-файлу:

start /d"{путь_к_firefox.exe}" firefox {tmp}/plugin.xpi

то есть нужно по сути открыть файл xpi через файрфокс чтобы начать установку плагина.

Последний раз редактировалось MrAWP, 28-04-2011 в 00:50.


Отправлено: 21:54, 27-04-2011 | #1454


Аватара для shao

Ветеран


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

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


R.i.m.s.k.y., спасибо!

Цитата R.i.m.s.k.y.:
.....вытаскивает в bin файлик »
Да, есть там такой...

Цитата R.i.m.s.k.y.:
разраб клайта в коде сделал проверку на доппараметры комстроки -MakeUnattended »
Цитата R.i.m.s.k.y.:
а innoup секцию код не вытаскивает в привычном скрипте инно »
К сожалению я в кодах не силён.....
Буду признателен, если кто такой код набросает....Если не сложно.

Отправлено: 23:39, 27-04-2011 | #1455


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

Ветеран


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

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


Код: Выделить весь код
[*C*ode]
var: www: integer; // переменную объявляем за пределами функций/процедур, так она будет доступна всем

Function InitializeSetup: Boolean;
var st :string; i: Integer; 
begin
  www := -1; // три значения: -1 - не изменялось, 0 - нет, 1 - да
  for i:=2 to ParamCount do begin
    st := Lowercase(ParamStr(i));
    Result := True;
    case st of
      Lowercase('/www_on') : www := 1;
      Lowercase('/www_off') : www := 0;
    end;
    Result := True; //а то почему-то Result "фолсится" и дистр закрывается не пикнув
  end; //case
end; //InitializeSetup

Function param_www_on: Boolean;
begin
if (www = 1) then Result := True else Result := False;
end;

[Files]
Source: nircmd.exe; DestDir: {app}\Utilities\; Flags: ignoreversion noencryption; Check: param_www_on

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

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

Отправлено: 08:44, 28-04-2011 | #1456


Ветеран


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

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


Цитата shao:
Если не сложно. »
Накидал пример, как это делается:
Пример

Код: Выделить весь код
; имя файла
#define NameInf "unattended.ini"

#define MyAppName "My Program"
#define MyAppVerName "My Program 1.5"
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=True
OutputDir=.
ShowLanguageDialog=auto
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: en; MessagesFile: compiler:Languages\English.isl
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
en.WelcomeLabel2=Click Next to continue, or Cancel to exit.
ru.WelcomeLabel2=Нажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти.
en.CreateDesktopIconAllUsers=For all users
ru.CreateDesktopIconAllUsers=Для всех пользователей
en.CreateDesktopIconUserOnly=For the current user only
ru.CreateDesktopIconUserOnly=Для текущего пользователя
en.UnattendedCaption=Unattended Install Maker for %1
ru.UnattendedCaption=Создание атоматического инсталлятора для %1
en.UnattendedCancelButton=Finish
ru.UnattendedCancelButton=Готово
en.FinishedHeadingLabel=Here something we write...
ru.FinishedHeadingLabel=Тут что-то пишем...
en.FinishedLabel=Here something we write...%n%n%nClick Finish.
ru.FinishedLabel=Тут что-то пишем...%n%n%nНажмите на кнопку "Готово".

[Components]
Name: main; Description: Main Files; Types: full compact custom; Flags: fixed
Name: help; Description: Help Files; Types: full
Name: help\english; Description: English; Types: full
Name: help\dutch; Description: Dutch; Types: full

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Components: main
Name: desktopicon\common; Description: {cm:CreateDesktopIconAllUsers}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: exclusive
Name: desktopicon\user; Description: {cm:CreateDesktopIconUserOnly}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: exclusive unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: unchecked

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app};  Components: main; Flags: ignoreversion
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: help\english; Flags: ignoreversion
Source: compiler:Examples\Readme-Dutch.txt; DestDir: {app}; Components: help\dutch; Flags: ignoreversion

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}; Tasks: desktopicon\common
Name: {userdesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}; Tasks: desktopicon\user
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon

[Code]
var
  MakeUnattended: Boolean;
  
function InitializeSetup(): Boolean;
begin
  Result := True;
  MakeUnattended := Pos('-MAKEUNATTENDED', Uppercase(GetCmdTail)) > 0;
end;

procedure CreateBat;
begin
  SaveStringToFile(
    ExtractFilePath(ExpandConstant('{srcexe}')) + ChangeFileExt('{#NameInf}', '.bat'), // имя батника
    '"' + ExtractFileName(ExpandConstant('{srcexe}')) + '" /verysilent /norestart /LoadInf=".\{#NameInf}"'#13#10, // сама запись
    False); // указываем, перезаписывать файл, если такой уже есть
end;

procedure SaveInfo;
var
  FileName, Value: string;
begin
  FileName := ExtractFilePath(ExpandConstant('{srcexe}')) + '{#NameInf}';
  SetIniString('Setup', 'Lang', ActiveLanguage, FileName); // язык
  SetIniString('Setup', 'Dir', ExpandConstant('{app}'), FileName); // выбранный каталог
  SetIniString('Setup', 'Group', ExtractFileName(ExpandConstant('{group}')), FileName); // группа
  SetIniBool('Setup', 'NoIcons', WizardForm.NoIconsCheck.Checked, FileName); // создавать или нет ярлык
  // указываем тип установки
  case WizardForm.TypesCombo.ItemIndex of
    0: SetIniString('Setup', 'SetupType', 'full', FileName);
    1: SetIniString('Setup', 'SetupType', 'compact', FileName);
    2: SetIniString('Setup', 'SetupType', 'custom', FileName);
  end;
  // проверяем какие компоненты выбраны
  Value := '';
  if IsComponentSelected('main') then
    Value := 'main,';
  if IsComponentSelected('help') then
    Value := Value + 'help,';
  if IsComponentSelected('help\english') then
    Value := Value + 'help\english,';
  if IsComponentSelected('help\dutch') then
    Value := Value + 'help\dutch,';
  if Value <> '' then
    SetLength(Value, Length(Value)-1);
  SetIniString('Setup', 'Components', Value, FileName);
  // проверяем доп. задачи
  Value := '';
  if IsTaskSelected('desktopicon') then
    Value := 'desktopicon,';
  if IsTaskSelected('desktopicon\common') then
    Value := Value + 'desktopicon\common,';
  if IsTaskSelected('desktopicon\user') then
    Value := Value + 'desktopicon\user,';
  if IsTaskSelected('quicklaunchicon') then
    Value := Value + 'quicklaunchicon,';
  if Value <> '' then
    SetLength(Value, Length(Value)-1);
  SetIniString('Setup', 'Tasks', Value, FileName);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if (CurPageID = wpReady) and MakeUnattended then
    begin
      SaveInfo;  // сохраняем выбранные данные
      CreateBat; // пишем батник
      // делаем имитацию финальной страницы
      with WizardForm do
        begin
          NextButton.Hide;
          BackButton.Hide;
          CancelButton.Left := ScaleX(310);
          CancelButton.Caption := ExpandConstant('{cm:UnattendedCancelButton}');
          FinishedHeadingLabel.Caption := ExpandConstant('{cm:FinishedHeadingLabel}');
          FinishedLabel.Caption := ExpandConstant('{cm:FinishedLabel}');
          FinishedPage.Show;
        end;
    end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if MakeUnattended then 
    begin // если Unattended, то закрываем инсталлятор по тихому
      Cancel := True;
      Confirm := False;
    end;
end;

procedure InitializeWizard();
begin
  if MakeUnattended then 
    with WizardForm do // при Unattended, указываем свои надписи
      begin
        Caption := ExpandConstant('{cm:UnattendedCaption,{#MyAppName}}');
        WelcomeLabel1.Caption := ExpandConstant('{cm:UnattendedCaption,{#MyAppName}}');
        WelcomeLabel2.Caption := ExpandConstant('{cm:WelcomeLabel2}');
      end;
end;

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

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

Отправлено: 09:34, 28-04-2011 | #1457


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

Ветеран


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

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


Цитата Serega:
Накидал пример, как это делается: »
а я то подумал что ему надо просто пример как из комстроки параметры вытягивать...

как в define определить переменную path вида {src}\q1w2 ?

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


Отправлено: 09:48, 28-04-2011 | #1458


Ветеран


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

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


Цитата R.i.m.s.k.y.:
как из комстроки параметры вытягивать »
самое простое, это Pos('искомые данные', GetCmdTail) > 0... да писанины получается меньше

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


Отправлено: 09:57, 28-04-2011 | #1459


Ветеран


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

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


Цитата R.i.m.s.k.y.:
как в define определить переменную path вида {src}\q1w2 ? »
Объясните подробней, может проще будет обойтись записью типа {code:GetPath}?
Код: Выделить весь код
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {code:GetPath}; Flags: ignoreversion

[Code]
function GetPath(s: string): string;
begin
  Result := ExpandConstant('{src}\q1w2');
end;

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

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

Отправлено: 10:32, 28-04-2011 | #1460



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Утилиты - [addon] Inno Setup CrOsP Наборы обновлений для Windows XP/2003/Windows 7 33 11-05-2011 16:03
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Inno Setup 5.3.6 OSZone Software Новости программного обеспечения 0 15-11-2009 17:30
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход