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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

Аватара для Johny777

Ветеран


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

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


semiono, Если я правильно понял, то вот накатал тебе булев функцию замены всех искомых строк/слов на нужную строку/слово в текстовом файле:
читать дальше »
Код: Выделить весь код
function ReplaseStringInTextFile(const FileName, FromString, ToString: String): Boolean;
var
  uText: String;
begin
  if not FileExists(FileName) then Exit;
  if LoadStringFromFile(FileName, uText) then while Pos(FromString, uText) > 0 do StringChange(uText, FromString, ToString);
  Result := SaveStringToFile(FileName, uText, False);
end;

procedure InitializeWizard();
begin
  if ReplaseStringInTextFile('C:\A.txt', 'VALVE', 'SOFTWARE') then MsgBox('OK', mbError, MB_OK);
end;


==================================================================================================== ========================

Tco 03, Вот только распаковка 7-Zip архивов http://sendfile.su/764485
Цитата Tco 03:
Вот пример проверки чекбоксов: »
оптимизировал принятие булев значений в методы чекбокса и функцию для Check:
изучай, пригодится
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Files]
Source: 1.zip; DestDir: {app}\File1.exe; Check: CheckBoxResult('File1');
Source: 2.zip; DestDir: {app}\File2.exe; Check: CheckBoxResult('File2');

[ Code]
var
  NewCheckBox1: TNewCheckBox;
  NewCheckBox2: TNewCheckBox;

function CheckBoxResult(const FileName: String): boolean;
begin
  case FileName of
    'File1': Result := NewCheckBox1.Checked;
    'File2': Result := NewCheckBox2.Checked;
  end;
end;

procedure NewCheckBox1Click(Sender: TObject);
begin
  if not NewCheckBox1.Checked then NewCheckBox2.Checked:= false;
  NewCheckBox2.Enabled:= not NewCheckBox1.Checked;
end;

Цитата Tco 03:
Кому придёт в голову сразу же повторно устанавливать прогу »
ну например не сразу, но у меня в инсталле 4 игры и иногда приходится доустановливать
Цитата Tco 03:
Сразу же при повторной установке рядом создаётся файл unins000.exe »
это я не учёл - лечится переименованием файла обратно на этапе ssInstall
Цитата Tco 03:
По мне так зачем это вообще нужно делать »
Ну, как известно с древних времён - каждый извращается по своему

==================================================================================================== ==============

insombia,
Цитата insombia:
как сделать новую папку чтобы при нажатии на неё создавалась сразу папка с названием игры »
читать дальше »
Код: Выделить весь код
[Setup]
AppName=777
AppVerName=777
DefaultDirname=C:\Setup
Compression=none


[  code]
var
  DirTreeView: TFolderTreeView;
  Edit: TEdit;
  Reset_Path_Button: TButton;


procedure DirFolderChange(Sender: TObject);
begin
  if TFolderTreeView(Sender).Directory <> WizardDirValue then Edit.Text := AddBackslash(TFolderTreeView(Sender).Directory) + '{#SetupSetting("AppName")}' else Edit.Text := TFolderTreeView(Sender).Directory;
  Reset_Path_Button.Enabled := Edit.Text <> RemoveBackslash(ExpandConstant('{#SetupSetting("DefaultDirName")}'));
end;


procedure BrowseForm_Buttons_OnClick(Sender: TObject);
begin
  case TButton(Sender).Caption of
    'Reset':
    begin
      Edit.Text := RemoveBackslash(ExpandConstant('{#SetupSetting("DefaultDirName")}'));
      TButton(Sender).Enabled := False;
    end;

    SetupMessage(msgButtonNewFolder):
    begin
      DirTreeView.CreateNewDirectory('Half-Life 2');
      Edit.Text := AddBackslash(DirTreeView.Directory) + '{#SetupSetting("AppName")}';
    end;

    SetupMessage(msgButtonOK): if Edit.Text <> WizardForm.DirEdit.Text then WizardForm.DirEdit.Text := Edit.Text;
  end;
end;


procedure BrowseClick(Sender: TObject);
var
  DefaultInstallPath: String;
  BrowseForm: TForm;
begin
  DefaultInstallPath := WizardDirValue;
  BrowseForm := TForm.Create(nil);
  with BrowseForm do
  begin
    ClientWidth := ScaleX(387);
    ClientHeight := ScaleY(364);
    Position := poScreenCenter;
    Caption := #32 + SetupMessage(msgBrowseDialogTitle);

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(7), ScaleY(4), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm;
    end;

    DirTreeView := TFolderTreeView.Create(nil)
    with DirTreeView do
    begin
      SetBounds(ScaleX(4), ScaleY(52), ScaleX(379), ScaleY(265));
      OnChange := @DirFolderChange;
      Parent := BrowseForm;
    end;

    ActiveControl := DirTreeView;

    Edit := TEdit.Create(nil);
    with Edit do
    begin
      SetBounds(ScaleX(4), ScaleY(25), ScaleX(379), ScaleY(21));
      Text := DirTreeView.Directory;
      Parent := BrowseForm;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(4), ScaleY(330), ScaleX(90), ScaleX(22));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonCancel);
      Cursor := crHand;
      ModalResult := mrCancel;
    end;

    Reset_Path_Button := TButton.Create(nil)
    with Reset_Path_Button do
    begin
      SetBounds(ScaleX(99), ScaleY(330), ScaleX(90), ScaleY(22));
      Parent := BrowseForm;
      Caption := 'Reset';
      Enabled := Edit.Text <> RemoveBackslash(ExpandConstant('{#SetupSetting("DefaultDirName")}'))
      Cursor := crHand;
      OnClick := @BrowseForm_Buttons_OnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(194), ScaleY(330), ScaleX(90), ScaleY(22));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonNewFolder);
      Cursor := crHand;
      OnClick := @BrowseForm_Buttons_OnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(289), ScaleY(330), ScaleX(90), ScaleY(22));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonOK);
      OnClick := @BrowseForm_Buttons_OnClick;
      Cursor := crHand;
      ModalResult := mrOk;
    end;

    DirTreeView.ChangeDirectory(AddBackslash(DefaultInstallPath), True);

    if ShowModal = mrOk then WizardForm.DirEdit.Text := Edit.Text else WizardForm.DirEdit.Text := DefaultInstallPath;

    Free;
  end;
end;

procedure InitializeWizard();
begin
  WizardForm.DirBrowseButton.OnClick := @BrowseClick;
end;


======================================================= UPD ============================================================

вот кому интересно - функция для максимального снижения количества оперативки используемой текущим процессом путём выгрузки страниц на жёсткий диск
например с 1900 кб до 400 кб, но это влияет на производительность, так что без необходимости не использовать
можно и настроить используемый размер памяти (увеличить/уменшить) своими цифрами

читать дальше »
Код: Выделить весь код
[Setup]
AppName=TrimWorkingSet
AppVerName=TrimWorkingSet
DefaultDirName={pf}\TrimWorkingSet

[  Code]
function SetProcessWorkingSetSize(hProcess: THandle; dwMinimumWorkingSetSize, dwMaximumWorkingSetSize: DWORD): BOOL; external 'SetProcessWorkingSetSize@kernel32.dll stdcall';
function GetCurrentProcess(): THandle; external 'GetCurrentProcess@kernel32.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): BOOL; external 'KillTimer@user32.dll stdcall';


function TrimWorkingSet(): BOOL;
begin
  Result := SetProcessWorkingSetSize(GetCurrentProcess, DWORD(-1), DWORD(-1));
end;


procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectDir then SetTimer(WizardForm.Handle, 16, 1, CallbackAddr('TrimWorkingSet'));
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:06, 19-02-2013 | #1681



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

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


Ветеран


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

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


del

Отправлено: 14:00, 19-02-2013 | #1682


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


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

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


Народ подскажите плиз, в общем у меня 3 архива
1 arc без сжатия data.arc
2 srep data.srp
3 arc сжатая папка игры data1.arc

код
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data1.arc'), ExpandConstant('{app}'), '', false , '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISSRepExtract ( 0, 0, ExpandConstant('{app}\data.srp'),ExpandConstant('{app}\data.arc'), false) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data.arc'), ExpandConstant('{app}'), '', false , '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

на распаковке на распаковке файлов игры(последний архив) выдает что не найдено ни одного файла указанного в ISArcExtract


2)проблема у меня при установке вместо 100% указано 300% ,как исправить?

Отправлено: 15:40, 19-02-2013 | #1683


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Цитата tsskz:
вместо 100% указано 300% ,как исправить? »
С примером идет уникальная в своей подробности справка, прочитай про records.inf в ней.
Цитата tsskz:
файлов игры(последний архив) выдает что не найдено ни одного файла указанного в ISArcExtract »
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data.arc') тут ты говоришь, что нужно искать архив рядом с инсталлом. а распаковал его перед этоим куда?
Цитата tsskz:
if not ISSRepExtract ( 0, 0, ExpandConstant('{app}\data.srp'),ExpandConstant('{app}\data.arc'), false) then break; »
Естественно, что рядом его нету.

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


Отправлено: 16:10, 19-02-2013 | #1684


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


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

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


Цитата:
Gnom_aka_Lexander
ок,разобрался спс

Отправлено: 16:28, 19-02-2013 | #1685


Ветеран


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

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


tsskz используй http://krinkels.org/showthread.php?t=49 и можно будет указывать только if not ISArcExtract

Отправлено: 20:27, 19-02-2013 | #1686


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


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

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


подскажите пожалуйста, как установить шрифты во время установки (.ttf и .otf)?

Отправлено: 20:32, 19-02-2013 | #1687


Ветеран


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

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


Lex_from_Belarus в инсталл или как именно во время установки?

Отправлено: 20:35, 19-02-2013 | #1688


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


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

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


Цитата insombia:
Lex_from_Belarus в инсталл или как именно во время установки? »
ну в систему установить шрифты, которые нужны для устанавливаемого приложения? их же просто скопировать мало, надо же ещё в реестр прописать, кароче может скриптик есть какой?

Upd: Разобрался сам

Последний раз редактировалось Lex_from_Belarus, 20-02-2013 в 01:16. Причина: Разобрался сам


Отправлено: 22:06, 19-02-2013 | #1689


Аватара для Tco 03

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


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

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


Johny777
Цитата Johny777:
Ну, как известно с древних времён - каждый извращается по своему »
Что верно, то верно

Господа, помогите, пожалйста, решить проблему, кто знает в чём дело и возможно ли избавиться от ошибки?
Суть в следующем: На странице выбора папки установки создаю кнопку, кустомную форму и чекбокс. При нажатии на кнопку проверяется свободное место на диске. Необходимое место считывается с файла .inf Если свободного места достаточно, то выдаётся сообщение "YES!!!" и выберается чекбокс - если свободного места не достаточно, то выдаётся сообщение "NO!!!" и появляется кустомная форма. Проблема в том, что это работает только со второй попытки, то есть свободного места достаточно, но при этом появляется сообщение "NO!!!" и появляется кустомная форма. Сразу же при повторном нажатии на кнопку этого больше не происходит - выдаётся сообщение "YES!!!" и выбирается чекбокс. При нехватке свободного места на диске функция работает без проблем! Почему так происходит при первом нажатии на кнопку? Вот этот самый код:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[ Code]
var
  MyForm: TSetupForm;
  MyButton: TButton;
  FreeMB, TotalMB: Cardinal;
  NewCheckBox1: TNewCheckBox;
  MyFile: String;

function MyFormExec: boolean;
var
  Path: String;
begin
  Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  
  MyForm:= CreateCustomForm;
with MyForm do begin
  Width:= ScaleX(798);
  Height:= ScaleY(543);
  Position:= poScreenCenter;
  MyForm.ShowModal;
end;
end;

procedure MyButtonOnClick(Sender: TObject);
begin
if FreeMb < GetIniInt('Info', 'Size', 0, 0, 0, MyFile) then
begin
  MsgBox(ExpandConstant('NO!!!'), mbCriticalError, mb_Ok);
  MyFormExec;
end else begin
  MsgBox(ExpandConstant('YES!!!'), mbInformation, mb_Ok);
  NewCheckBox1.Checked:= True;
end;
end;

procedure InitializeWizard();
begin
  MyFile:= 'C:\Info.inf';
  
  MyButton:= TButton.Create(WizardForm);
with MyButton do begin
  Left:= WizardForm.DirBrowseButton.Left;
  Top:= WizardForm.DirBrowseButton.Top + ScaleY(30);
  Width:= WizardForm.DirBrowseButton.Width;
  Height:= WizardForm.DirBrowseButton.Height;
  Caption:= 'Click Me';
  OnClick:= @MyButtonOnClick;
  Parent:= WizardForm.SelectDirPage;
end;

  NewCheckBox1:= TNewCheckBox.Create(WizardForm);
with NewCheckBox1 do begin
  Left:= MyButton.Left + ScaleY(30);
  Top:= MyButton.Top + ScaleY(30);
  Width:= ScaleX(12);
  Height:= ScaleY(12);
  Parent:= WizardForm.SelectDirPage;
end;
end;

Отправлено: 13:42, 20-02-2013 | #1690



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход