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

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

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

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

Ветеран


Contributor


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


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

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


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

Отправлено: 19:06, 28-03-2013

 

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


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

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


Как добавить верний прогресс-бар (нижной - отображает общий прогресс, верхний - распаковку одного файла) с процентами рядом с каждым для обычных файлов, к єтому скрипту
читать дальше »
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[Files]
Source: innocallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: files\*; DestDir: {app}; Flags: recursesubdirs

[Languages]
Name: Ukrainian; MessagesFile: compiler:Languages\Ukrainian.isl

[code]
type
TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);

var
TimerID: LongWord;
PercentsLabel: TLabel;

function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32 stdcall delayload';

Procedure MyTimerProc(h, msg, idevent, dwTime: Longword);
Begin
if WizardForm.CurPageID = wpInstalling then with WizardForm.ProgressGauge do PercentsLabel.Caption:= Format('%s'#32'%s', ['Установка игры:', FormatFloat('0.0 %', (Position*100)/Max)]);
End;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;

procedure InitializeWizard();
begin
PercentsLabel:= TLabel.Create(WizardForm);
with PercentsLabel do
begin
Left:= WizardForm.DirEdit.Left;
Top:= ScaleY(WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 30);
Width:= WizardForm.StatusLabel.Width;
Height:= WizardForm.StatusLabel.Height;
AutoSize:= False;
Transparent := True;
Alignment := taCenter;
Font.Style:= [fsBold, fsItalic];
Font.Size:= 14;
Font.Name:= 'Times New Roman';
Font.Color:= ClMaroon;
Parent:= WizardForm.InstallingPage;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then TimerID:= SetTimer(0, 0, 500 {Установка игры}, WrapTimerProc(@MyTimerProc, 4));
end;

Последний раз редактировалось neorom, 24-04-2013 в 00:31.


Отправлено: 00:21, 24-04-2013 | #291



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

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


Ветеран


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

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


Цитата neorom:
Как добавить верний прогресс-бар (нижной - отображает общий прогресс, верхний - распаковку одного файла) с процентами рядом с каждым для обычных файлов, к єтому скрипту »
Средствами Inno? Создать кастомный прогресс бар, и таймер, который будет передвигать прогресс бар основываясь на размере копируемого файла(наверное), и т.д. Есть где-то пример реализации подобного, но там, если я не путаю, учитываются только файлы лежащие в корневом каталоге, тоесть подпапки в расчет не берутся. Все файлы нужно раскидывать по каталогам вручную, в секции Files, посредством DestDir, и если файлов сотни, а то и тысячи... Вообщем игра не стоит свеч.

Последний раз редактировалось saurn, 24-04-2013 в 01:05.


Отправлено: 00:52, 24-04-2013 | #292


Аватара для Gnom_aka_Lexander

Ветеран


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

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


neorom, вот, поправлял как-то существующий пример до удобоваримого. на 100% корректно сделать невозможно по множеству причин. главная из них - прегресс рассчитывается исходя из размера сжатого файла.
скачать

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

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

Отправлено: 13:16, 24-04-2013 | #293


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


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

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


Цитата Gnom_aka_Lexander:
прегресс рассчитывается исходя из размера сжатого файла »
А эсли не жимать файли, то получеться.

Может кто подскажет, где эсть информация как роботать з inno setup китайськая версия в Редакторе форм.

Отправлено: 21:49, 24-04-2013 | #294


Аватара для audiofeel

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


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

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


Доброе утро, Всем. в примере "GameuxInstallHelper.iss" реализованно все для одного ГДФБинари, "проблема" в том что их два, один для MP второй для SP - как быть, просто "повторить" - "if CurStep = ssPostInstall then begin"
и "if CurUninstallStep = usUninstall then begin" просто вписывая данные для каждого отдельно. как бы это сделать все правильно что ли , что бы при удалении не было эррор

Отправлено: 06:13, 25-04-2013 | #295


Ветеран


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

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


audiofeel, я ведь вам уже говорил, объявлять дважды один и тот же шаг установки или деинсталяции(CurStep, CurUninstallStep) не имеет смысла. Объявляйте все процедуры в порядке выполнения внутри шага. Покажите, что там за пример, а то я, что-то у себя не нахожу.

Отправлено: 06:19, 25-04-2013 | #296


Аватара для audiofeel

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


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

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


saurn, У ГДФ "названия" разные и "MainExe" разные
пример
читать дальше »
Код: Выделить весь код
type
TGUID = record
Data1: Cardinal;
Data2,
Data3: Word;
Data4: array [0..8] of char;
end;

function GenerateGUID(var GUID: TGUID): Cardinal;
  external 'GenerateGUID@files:GameuxInstallHelper.dll stdcall setuponly';
function AddToGameExplorer(Binary: String; Path: String; InstallType: Integer; var GUID: TGUID): Cardinal;
  external 'AddToGameExplorerA@files:GameuxInstallHelper.dll stdcall setuponly';
function CreateTask(InstallType: Integer; var GUID: TGUID; TaskType: Integer; TaskNumber: Integer; TaskName: String; Binary: String; Parameters: String): Cardinal;
  external 'CreateTaskA@files:GameuxInstallHelper.dll stdcall setuponly';
function RetrieveGUIDForApplication(Binary: String; var GUID: TGUID): Cardinal;
  external 'RetrieveGUIDForApplicationA@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveFromGameExplorer(var GUID: TGUID): Cardinal;
  external 'RemoveFromGameExplorer@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveTasks(var GUID: TGUID): Cardinal;
  external 'RemoveTasks@{app}\GameuxInstallHelper.dll stdcall uninstallonly';

const
  PlayTask = 0;
  SupportTask = 1;

var
  GUID: TGUID;

procedure CurStepChanged2(CurStep: TSetupStep);
var
  Binary, MainExe: String;
begin
  if CurStep = ssInstall then
    GenerateGUID(GUID);

  if CurStep = ssPostInstall then begin
    Binary := ExpandConstant('{app}\GDFBinary.dll');
    MainExe := ExpandConstant('{app}\Binaries\MoHUpdater.exe');
    AddToGameExplorer(Binary, ExpandConstant('{app}'), 3, GUID);
    CreateTask(3, GUID, PlayTask, 0, 'Play', MainExe, '');
    CreateTask(3, GUID, PlayTask, 1, 'Medal of Honor (TM) - Повторно авторизуйте данное устройство', 'Binaries\moh.exe', ' -ead_gl_remove');
    CreateTask(3, GUID, PlayTask, 2, 'Readme', 'Support\readme.ru.txt', '');
    CreateTask(3, GUID, PlayTask, 3, 'EA EULA', 'Support\EAEula\ru_eula.rtf', '');
    CreateTask(3, GUID, PlayTask, 4, 'Техническая поддержка', 'Support\EA Help\Electronic_Arts_Technical_Support.htm', '');
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Binary: String;
  GUID: TGUID;
begin
  if CurUninstallStep = usUninstall then begin
    Binary := ExpandConstant('{app}\GDFBinary.dll');
    RetrieveGUIDForApplication(Binary, GUID);
    RemoveFromGameExplorer(GUID);
    RemoveTasks(GUID);
    UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
  end;
end;

Последний раз редактировалось audiofeel, 25-04-2013 в 09:07.


Отправлено: 06:26, 25-04-2013 | #297


Ветеран


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

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


audiofeel, я использую другой способ. Пробуйте, работает - не работает, проверить сейчас не могу. Только имена бинарников в шапке скрипта свои укажите.

читать дальше »
Код: Выделить весь код
#define GDFSP "{app}\GDFsp.dll"
#define GDFMP "{app}\GDFmp.dll"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=...

[Files]
Source: GameuxInstallHelper.dll; DestDir: {app}; Flags: overwritereadonly

[Code]
type
  TGUID = record
    D1: Cardinal;
    D2: Word;
    D3: Word;
    D4: Array [0..8] of Byte;
  end;

function AddToGameExplorer(BinaryPatch: String; Path: String; InstallType: Integer; var GUID: TGUID): Cardinal; external 'AddToGameExplorerA@files:GameuxInstallHelper.dll stdcall setuponly';
function RetrieveGUIDForApplication(BinaryPatch: String; var GUID: TGUID): Cardinal; external 'RetrieveGUIDForApplicationA@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveFromGameExplorer(var GUID: TGUID): Cardinal; external 'RemoveFromGameExplorer@{app}\GameuxInstallHelper.dll stdcall uninstallonly';

var
  GUID: TGUID;
  GDFSP, GDFMP: String;
  
procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
    ssPostInstall:
    begin
      GDFSP := ExpandConstant('{#GDFsp}');
      GDFMP := ExpandConstant('{#GDFmp}');
      AddToGameExplorer(GDFSP, ExpandConstant('{app}'), 3, GUID);
      AddToGameExplorer(GDFMP, ExpandConstant('{app}'), 3, GUID);
    end;
  end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  case CurUninstallStep of
    usUninstall:
    begin
      GDFSP := ExpandConstant('{#GDFsp}');
      GDFMP := ExpandConstant('{#GDFmp}');
      RetrieveGUIDForApplication(GDFSP, GUID);
      RetrieveGUIDForApplication(GDFMP, GUID);
      RemoveFromGameExplorer(GUID);
      UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
    end;
  end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:52, 25-04-2013 | #298


Аватара для audiofeel

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


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

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


saurn, проверил - создается один ярлык в Game Explorer, причем пустой не кликабельный именно на второй GDFBinary2.DLL (для мульта), но зато для всех пользователей (ну это так к слову)
читать дальше »
Код: Выделить весь код
type
  TGUID = record
    D1: Cardinal;
    D2: Word;
    D3: Word;
    D4: Array [0..8] of Byte;
  end;

function AddToGameExplorer(BinaryPatch: String; Path: String; InstallType: Integer; var GUID: TGUID): Cardinal; 
  external 'AddToGameExplorerA@files:GameuxInstallHelper.dll stdcall setuponly';
function RetrieveGUIDForApplication(BinaryPatch: String; var GUID: TGUID): Cardinal; 
  external 'RetrieveGUIDForApplicationA@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveFromGameExplorer(var GUID: TGUID): Cardinal; 
  external 'RemoveFromGameExplorer@{app}\GameuxInstallHelper.dll stdcall uninstallonly';

var
  GUID: TGUID;
  GDFSP, GDFMP: String;

procedure CurStepChanged2(CurStep: TSetupStep);
begin
  case CurStep of
    ssPostInstall:
    begin
      GDFSP := ExpandConstant('{app}\GDFBinary.dll');
      GDFMP := ExpandConstant('{app}\GDFBinary2.dll');
      AddToGameExplorer(GDFSP, ExpandConstant('{app}'), 3, GUID);
      AddToGameExplorer(GDFMP, ExpandConstant('{app}'), 3, GUID);
    end;
  end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  case CurUninstallStep of
    usUninstall:
    begin
      GDFSP := ExpandConstant('{app}\GDFBinary.dll');
      GDFMP := ExpandConstant('{app}\GDFBinary2.dll');
      RetrieveGUIDForApplication(GDFSP, GUID);
      RetrieveGUIDForApplication(GDFMP, GUID);
      RemoveFromGameExplorer(GUID);
      UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
    end;
  end;
end;

Отправлено: 09:00, 25-04-2013 | #299


Ветеран


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

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


audiofeel, да нет, все добавляется корректно. есть косяки с удалением(остается мертвый ярлык) пока нет времени ковырять, может разберетесь раньше. Может кто более сведущий нам подскажет, я-то тоже не особо спец. На счет пустых ярлыков, смотрите в сторону бинарников.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:59, 25-04-2013 | #300



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход