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

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

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

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

Ветеран


Contributor


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


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

Профиль | Отправить 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] - Скачать;

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Скрипты Inno Setup. Помощь и советы [часть 6]

Отправлено: 11:48, 10-03-2014

 

Аватара для Dodakaedr

Ветеран


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

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


vint56, спс

-------
Inno Setup 5 Ultra Unicode


Отправлено: 18:18, 28-03-2014 | #141



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

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


Ветеран


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

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


Цитата Shkutu:
в таком варианте работает несовсем корректно. Страницы меняются, но не меняются шапки, т е на странице с выбором папки заголовок про выбор компонентов и наоборот. »
Тупой копи-паст я не приветствую, где же хоть немного подумать?!!! Ваш вопрос был:
Цитата Shkutu:
можно ли в инно поменять порядок отображения стандартных страниц? »
Я именно это и показал... извините, что решил дать вам шанс лишний раз подумать...
Поверьте, только после того, как вы начнёте переделывать код под свои нужды, только тогда вы начнёте разбираться.

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


Последний раз редактировалось Serega, 28-03-2014 в 19:40.


Отправлено: 19:31, 28-03-2014 | #142


Аватара для Dodakaedr

Ветеран


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

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


Как добавить чекбокс в деинсталятор с функцией не удалять файл?

-------
Inno Setup 5 Ultra Unicode


Отправлено: 00:14, 29-03-2014 | #143


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


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

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


Здравствуйте. Как можно сделать инсталятор как на скриншоте? Может есть готовый скрипт для inno setup? Главное надо, чтобы пользователь мог выбрать между обычной и портативной версией.

Отправлено: 16:22, 29-03-2014 | #144


Ветеран


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

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


Цитата Dodakaedr:
Как добавить чекбокс в деинсталятор »
Пример для расширенной версии

Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[CustomMessages]
ru.CheckBoxDel=Удалить все настройки

[Dirs]
Name: {userappdata}\MyTestDir

[UninstallDelete]
Name: {userappdata}\MyTestDir; Type: filesandordirs; Check: DelUserSettings

[Code]
procedure Delay(Milliseconds: Integer); forward;

var
  NextClick: Boolean;
  DelOptions: Boolean;
  
function DelUserSettings: Boolean;
begin
  Result := DelOptions;
end;

procedure NextBtnClick(Sender: TObject);
begin
  NextClick := True;
end;

procedure chkDelClick(Sender: TObject);
begin
  DelOptions := TCheckBox(Sender).Checked;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  msg: string;
  NextBtn: TButton;
  chkDel: TCheckBox;
begin
  if CurUninstallStep = usUninstall then
    try
      with UninstallProgressForm do
        begin
          ProgressBar.Hide;
          msg := StatusLabel.Caption;
        end;

      NextClick := False;
      NextBtn := TButton.Create(UninstallProgressForm);
      with NextBtn do
        begin
          Parent := UninstallProgressForm;
          SetBounds(UninstallProgressForm.CancelButton.Left, UninstallProgressForm.CancelButton.Top,
            UninstallProgressForm.CancelButton.Width, UninstallProgressForm.CancelButton.Height);
          Caption := SetupMessage(msgButtonNext);
          OnClick := @NextBtnClick;
        end;

      chkDel := TCheckBox.Create(UninstallProgressForm);
      with chkDel do
        begin
          Parent := UninstallProgressForm.InstallingPage;
          SetBounds(UninstallProgressForm.StatusLabel.Left + ScaleX(20), UninstallProgressForm.StatusLabel.Top + ScaleY(50), ScaleX(250), ScaleY(14));
          Caption := CustomMessage('CheckBoxDel');
          Checked := False;
          OnClick := @chkDelClick;
        end;

      while not NextClick do
        Delay(500);
    finally
      chkDel.Hide;
      NextBtn.Free;
      with UninstallProgressForm do
        begin
          ProgressBar.Show;
          StatusLabel.Caption := msg;
        end;
    end;
end;

const
  PM_REMOVE    = 1;
  QS_ALLINPUT  = $000000FF;
  WAIT_TIMEOUT = $00000102;

function PeekMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';
function MsgWaitForMultipleObjects(nCount: DWORD; var pHandles: THandle; fWaitAll: BOOL; dwMilliseconds, dwWakeMask: DWORD): DWORD;
  external 'MsgWaitForMultipleObjects@user32.dll stdcall';
function CreateEvent(lpEventAttributes: Longint; bManualReset, bInitialState: BOOL; lpName: PChar): THandle; external 'CreateEventA@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';

procedure Application_ProcessMessages;
var
  Msg: TMsg;
begin
  while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
end;

procedure Delay(Milliseconds: Integer);
var
  dwTick: DWORD;
  hEvent: THandle;
begin
  hEvent := CreateEvent(0, False, False, '');
  try
    dwTick := GetTickCount + DWORD(Milliseconds);
    while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, hEvent, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
      begin
        Application_ProcessMessages;
        Milliseconds := dwTick - GetTickCount;
      end;
  finally
    CloseHandle(hEvent);
  end;
end;

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

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

Отправлено: 19:51, 29-03-2014 | #145


Аватара для Dodakaedr

Ветеран


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

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


Serega, спасибо, но нету что-то по проще. Мне нужно чтобы не удалился только один файл если отмечен чекбокс. Inno Ultra считается расширенной?

-------
Inno Setup 5 Ultra Unicode


Отправлено: 19:56, 29-03-2014 | #146


Аватара для Debugger

Ветеран


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

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


Никак не могу понять в чем дело... Имеется такой вот код:
Код: Выделить весь код
function CheckPSE9: Boolean;
  begin
    Result := RegKeyExists(HKLM32, 'SOFTWARE\Adobe\Photoshop Elements\9.0\PluginPath')
  end;

function CheckPSE10: Boolean;
  begin
    Result := RegKeyExists(HKLM32, 'SOFTWARE\Adobe\Photoshop Elements\10.0\PluginPath')
  end;
  
function CheckPSE11: Boolean;
  begin
    Result := RegKeyExists(HKLM32, 'SOFTWARE\Adobe\Photoshop Elements\11.0\PluginPath')
  end;

Source: c:\Alien Skin\work32\Plug-ins\Alien Skin\Blow Up 3\*; DestDir: {reg:HKLM32\SOFTWARE\Adobe\Photoshop Elements\9.0,PluginPath}\Alien Skin\Blow Up 3; Components: BlowUp3\BlowUp3PSE9; Check: "IsWin64"; Flags: recursesubdirs createallsubdirs

Source: c:\Alien Skin\work32\Plug-ins\Alien Skin\Blow Up 3\*; DestDir: {reg:HKLM32\SOFTWARE\Adobe\Photoshop Elements\10.0,PluginPath}\Alien Skin\Blow Up 3; Components: BlowUp3\BlowUp3PSE10; Check: "IsWin64"; Flags: recursesubdirs createallsubdirs

Source: c:\Alien Skin\work32\Plug-ins\Alien Skin\Blow Up 3\*; DestDir: {reg:HKLM32\SOFTWARE\Adobe\Photoshop Elements\11.0,PluginPath}\Alien Skin\Blow Up 3; Components: BlowUp3\BlowUp3PSE11; Check: "IsWin64"; Flags: recursesubdirs createallsubdirs
То есть идет проверка наличия программы, и если она есть, установка плагина в папку которая берется из реестра. Но установка проходит нормально только для Photoshop Elements 11. В случае девятого и десятого инсталлятор не может найти ключ в реестре (проверялось при помощи Process Monitor), хотя он есть, и соответственно ставит плагин на системный диск. Причем в секции кода ключ находится нормально. В чем может быть дело? Всю голову уже сломал... Единственное что приходит в голову это то, что когда я писал скрипт, то только для одиннадцатой версии строчку писал руками, а для остальных копипастил ее и потом исправлял, но не может же быть проблема из-за этого.

Отправлено: 21:13, 29-03-2014 | #147


Ветеран


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

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


Цитата Dodakaedr:
нету что-то по проще. Мне нужно чтобы не удалился только один файл если отмечен чекбокс »
Проще только с сообщением
Пример

Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[CustomMessages]
ru.Del=Удалить файл Справки

[Files]
Source: {#CompilerPath}\ISetup.chm; DestDir: {userappdata}; Flags: ignoreversion uninsneveruninstall

[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if (CurUninstallStep = usUninstall) and
    (MsgBox(CustomMessage('Del'), mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
      DeleteFile(ExpandConstant('{userappdata}\ISetup.chm'));
end;

Цитата Dodakaedr:
Inno Ultra считается расширенной? »
В составе Inno Ultra есть расширенная версия.

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

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

Отправлено: 17:11, 30-03-2014 | #148


Аватара для Dodakaedr

Ветеран


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

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


Serega, спс!

-------
Inno Setup 5 Ultra Unicode


Отправлено: 17:14, 30-03-2014 | #149


Ветеран


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

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


В PM мне написали, что указанный в шапке пример Отображение размера устанавливаемого файла работает не корректно, а именно функция BytesToReadable не работает с размерами выше мегабайта. Проверил, действительно, в новых версиях Inno, работает не правильно.
Само сообщение уже отредактировать не могу, т.к. тема в архиве, поэтому приведу исправленный вариант в этом сообщении:
Пример

Код: Выделить весь код
[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
ru.Bt=Бт
ru.Kb=Кб
ru.Mb=Мб
ru.Gb=Гб
ru.Tb=Тб
ru.Pb=Пб
ru.Eb=Эб

[Code]
var
  ProgressLabel, SizeLabel: TLabel;

function BytesToReadable(Bytes: string; Signs: Integer): string;
{ Перевод числа в значение Бт/Кб/Мб/Гб/Тб/Пб/Эб (Signs - количество знаков после запятой)}
var
  ABytes: Extended;
  i: Integer;
begin
  i := 0;
  try
    ABytes := StrToFloat(Bytes);
  except
  end;
  while Int(ABytes) >= 1024 do
    begin
      ABytes := ABytes/1024;
      i := i + 1;
    end;
  case i of
    0: Result := FloatToStr(Int(ABytes)) + Padl(ExpandConstant('{cm:Bt}'), 1);                // Байт
    1: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Kb}'), [ABytes]); // Килобайт
    2: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Mb}'), [ABytes]); // Мегабайт
    3: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Gb}'), [ABytes]); // Гигабайт
    4: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Tb}'), [ABytes]); // Терабайт
    // больше Терабайта конечно не пригодится, покрайней мере в ближайшее время, но всё же...
    5: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Pb}'), [ABytes]); // Петабайт
    6: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Eb}'), [ABytes]); // Эксабайт
  end;
  StringChange(Result, ',', '.');
end;

function Size64(Hi, Lo: Integer): Extended;
begin
  Result := Lo;
  if Lo < 0 then
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
  for Hi := Hi - 1 downto 0 do
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
end;

function GetFileSize(const FileName: string): Extended;
var
  FindRec: TFindRec;
begin
  Result := 0;
  if FindFirst(FileName, FindRec) then
    try
      if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
        Result := Size64(FindRec.SizeHigh, FindRec.SizeLow);
    finally
      FindClose(FindRec);
    end;
end;

procedure Progress;
begin
  with WizardForm.ProgressGauge do
    ProgressLabel.Caption := IntToStr(Position*100/(Max - Min)) + '%';
  SizeLabel.Caption := BytesToReadable(FloatToStr(GetFileSize(ExpandConstant(CurrentFileName))), 1);
end;

procedure InitializeWizard();
begin
  ProgressLabel := TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      ProgressLabel.Top := Top + Height + ScaleY(8);
      ProgressLabel.Left := Left + Width/2 - ScaleX(8);
      ProgressLabel.AutoSize := True;
      ProgressLabel.Parent := WizardForm.InstallingPage;
    end;

  SizeLabel := TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      SizeLabel.Top := Top + Height + ScaleY(8);
      SizeLabel.Left := Left;
      SizeLabel.AutoSize := True;
      SizeLabel.Parent := WizardForm.InstallingPage;
    end;
end;

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

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

Отправлено: 18:13, 30-03-2014 | #150



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты 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




 
Переход