Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 [108] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126

R.i.m.s.k.y.
30-09-2017, 22:05
vk_k14m@vk, под if'ом должна быть логическая переменная

vk_k14m@vk
30-09-2017, 22:20
под if'ом должна быть логическая переменная »
Наверно мне нужно было сразу сказать что я в Inno Setup чуть больше недели, а про Pascal вообще ничего не знаю. К слову как и про программирование в целом. Так что твой ответ мне ничего не говорит...

Nordek
30-09-2017, 22:59
что бы одновременно шла установка и показывался splash »
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

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

[Files]
Source: "splash.bmp"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "Files\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Code]
procedure ShowSplashScreen(p1:HWND;p2:Ansistring;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('back.bmp');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\back.bmp',1000,3000,1000,0,255,False,$F FFFFF,10);
end;

// 1 2 3 4 5 6 7
// ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\back.bmp',1000,3000,1000,0,255,False,$F FFFFF,10);
//1 Время появления в мсек
//2 Время показа в мсек
//3 Время затухания
//4 Минимальная прозрачность (0-255)
//5 Максимальная прозрачность (0-255)
//6 Вырезать цвет (считать вырезанный цвет прозрачным)
//7 Цвет прозрачности - Указание цвета для прозрачности. По умолчанию "Белый цвет (FFFFFF)". Значения считать справа налево, например красный не FF0000 а 0000FF.

1 2 3 4 5 6 7
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\back.bmp',1000,3000,1000,0,255,False,$F FFFFF,10);
1 Время появления в мсек
2 Время показа в мсек
3 Время затухания
4 Минимальная прозрачность (0-255)
5 Максимальная прозрачность (0-255)
6 Вырезать цвет (считать вырезанный цвет прозрачным)
7 Цвет прозрачности - Указание цвета для прозрачности. По умолчанию "Белый цвет (FFFFFF)". Значения считать справа налево, например красный не FF0000 а 0000FF.[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Files]
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: back.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Files\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Code]
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';

procedure InitializeWizard;
begin
ssInitialize(GetWindowLong(MainForm.Handle,-8),0,False,1,$000000ff);
ExtractTemporaryFile('back.bmp');
ssSetBkgImage(ExpandConstant('{tmp}')+'\back.bmp');
end;

// 1 2 3 4 5
// ssInitialize(GetWindowLong(MainForm.Handle,-8),8,True,0,$FF000000);
// 1 Время показа в секундах
// 2 Использование эффекта "Растворение". False - Выкл/True - Вкл
// 3 Метод масштабирования 0 - Не растягивать 1 - Пропорционально 2 - Во весь экран
// 4 Прозрачность полотна
// 5 Цвет полотна


1 2 3 4 5
ssInitialize(GetWindowLong(MainForm.Handle,-8),8,True,0,$FF000000);
1 Время показа в секундах
2 Использование эффекта "Растворение". False - Выкл/True - Вкл
3 Метод масштабирования 0 - Не растягивать 1 - Пропорционально 2 - Во весь экран
4 Прозрачность полотна
5 Цвет полотна

vk_k14m@vk
02-10-2017, 17:13
Ответьте кто нибудь, как работает этот код?
[Files]
Check: Уже_установленное_приложение; Source: сразу_извлекается_и_запускается_этот_файл.exe; DestDir: {tmp}; BeforeInstall: ChangeCaption('Установка этого файла'); AfterInstall: install_this_file; Flags: ignoreversion recursesubdirs createallsubdirs;
...
Source: Твои файлы...


[Сode]

procedure install_this_file();
var res:integer; file, path : string;
begin
file := ExpandConstant('{tmp}\сразу_извлекается_и_запускается_этот_файл.exe'); path := ExpandConstant('{tmp}');
if FileExists(file) then Exec(file, ' параметры',path,SW_SHOW,ewWaitUntilTerminated,res) else MsgBox('Файл' + ' ' + file + #13#10 + 'не найден', mbInformation, MB_OK);
end;

Function Уже_установленное_приложение():boolean;
begin
if это_приложение_уже_установлено then Result := True else Result := False;
end;
Что на что там заменять?
AppName=Artificial Academy 2
Приложение которое должно запускаться перед началом установки:
D:\Inno Setup\Installer\0 Delete after install\AA2Decrypt_unpack.bat

R.i.m.s.k.y.
02-10-2017, 21:32
как работает этот код »
замурчательно работает

тебе понятно как работают секции Инно, в частности Files?
если да - продолжаем, если нет - читай справку в частности по ключевым словам что я тебе давал про порядок установки
В ней дисительно расписано нормально

если функция Уже_установленное_приложение возвращает True то строчка с Check: Уже_установленное_приложение;
Check: Уже_установленное_приложение; Source: сразу_извлекается_и_запускается_этот_файл.exe; DestDir: {tmp}; BeforeInstall: ChangeCaption('Установка этого файла'); AfterInstall: install_this_file; Flags: ignoreversion recursesubdirs createallsubdirs;
выполняется, если если функция Уже_установленное_приложение возвращает False то строчка пропускается

В строке присутствуют процедуры BeforeInstall и AfterInstall
Первая работает перед копированием Source: сразу_извлекается_и_запускается_этот_файл.exe, вторая - после.
После копирования файла Source: сразу_извлекается_и_запускается_этот_файл.exe запускается процедура AfterInstall: install_this_file, которая содержит запуск файла сразу_извлекается_и_запускается_этот_файл.exe из папки DestDir: {tmp}
Отсюда побочный вывод: если копируется не один файл а папка с набором файлов то AfterInstall: нечто будет запускаться после копирования каждого файла из папки что может как минимум затормозить установку и вызвать непредвиденные последствия

____________

Всё что я расписал есть в справке, легко находится по словам Check, BeforeInstall и AfterInstall

vk_k14m@vk
02-10-2017, 22:12
если функция Уже_установленное_приложение возвращает True »
А если функция возвращает ошибку??? У меня ошибка в этой строчке. По этому я и спрашиваю как она работает. Как она понимает True или не True? Что они проверяет? К тому же Check: Уже_установленное_приложение не компилируется, похоже он не понимает русские символы.
https://pp.userapi.com/c841626/v841626621/2651d/Di40sHJDtmc.jpg
Так что я переименовал Check: Already_Installed_Application;
Потом, инстеллер компилируется. Но потом когда пытаюсь установить свое приложение, выскакивает ошибка в этой строчке

Function Already_Installed_Application():boolean;
begin
if это_приложение_уже_установлено then Result := True else Result := False;
end;

Приложение вообще не устанавливается.

Значение это_приложение_уже_установлено нужно изменять на свое? Там нужно вписывать название приложение которое устанавливает инсталлер? Когда пишу ExpandConstant('{#MyAppName}') тоже ошибка. Как же заставить его работать...

BeforeInstall »
Все что тут делает BeforeInstal так это меняет сообщение при установке
BeforeInstall: ChangeCaption('Установка этого файла')
Так что он в этом случае бесполезен.

Iska
03-10-2017, 00:05
тебе понятно как работают секции Инно, в частности Files? »
R.i.m.s.k.y., конечно, не понимает. В принципе не понимает, что нужно делать. Коллега vk_k14m@vk банально пытается компилировать представленную ему ранее болванку скрипта и кода как есть. Изучать справку и язык не хочет/не может.

vk_k14m@vk, загрузите себе перевод (http://forum.oszone.net/post-2703431.html#post2703431), поблагодарите коллегу mig73 за выложенное и читайте, читайте, читайте.

vk_k14m@vk
03-10-2017, 01:07
Все работает, просто убрал проблемные строчки

Function Already_Installed_Application():boolean;
begin
if это_приложение_уже_установлено then Result := True else Result := False;
end;

и пошло как по маслу. Правда теперь то приложение при любой установке запускается. Зато лишней мороки с кодом нет...

R.i.m.s.k.y.
03-10-2017, 07:42
я то конечно для наглядности сделал русские идентификаторы и по наивности подумал что будет всё ясно, в т.ч что идентификаторы нужно поменять на английские

Все работает, просто убрал проблемные строчки »
и проверки теперь нет

ZVSRus
03-10-2017, 13:58
Правда теперь то приложение при любой установке запускается. Зато лишней мороки с кодом нет...
А какие приложения подразумеваются, и какая требуется проверка, на запуск или на установку, или на то и другое?

R.i.m.s.k.y.
03-10-2017, 14:31
А какие приложения подразумеваются, и какая требуется проверка, на запуск или на установку, или на то и другое? »

изначально желалосьПривет народ, снова я. Я вам еще не надоел?
Снова нужен ответ. С помощью секции [Run] можно запустить любое приложение после распаковки всех файлов. А можно ли тоже самое провернуть ДО распаковки?
Суть в чем, если помните моя инсталляция распаковывает "распакованные" файлы, и в конце их запаковывает. И так же установка выборочная. Если кто-то установит "легкую" версию, а потом захочет до-установить что-то. То ему нужно будет полностью удалять приложение и ставить с нуля. Так как инсталляция распакует нужные файлы а в конце снова их запакует чем создаст дубликаты архивов (так уже работает тот пакер).
По этому при повторной установке перед распаковкой нужно запустить файл (батник) который бы снова распаковал установленные ранее архивы. Как это сделать? Это получается что этот батник должен сначала распаковаться, потом прекратить установку остальных файлов, и только после его закрытия распаковка должна продолжиться. И это должно происходить только если программа уже была ранее установлена. Это не слишком сложно сделать?
З.Ы. Кто-то сталкивался с подобными запаковывающими/распаковывающими приложениями которые через консоль работают? Может подскажите какие могут быть аргументы что б приложение не создавало дубликат уже существующего архива, а заменяло его? В описании программы нет вообще никаких данных о работе через консоль. Только "кинуть на него архива для распаковки" и "кинуть папку для запаковки". »но не шмоглось
как ни советовали

ZVSRus
03-10-2017, 14:53
R.i.m.s.k.y. Извиняюсь, с чего началась тема подзабыл.
"распакованные" файлы, запакованные файлы, батник, консоль. Только "кинуть на него архива для распаковки" и "кинуть папку для запаковки" - Тяжело сразу понять данное ассорти. Я понимаю это игра. Мне подумалось что одни файлы нужно распаковать через один чекбокс, другие через другой чекбокс, сделать проверку на данные чекбоксы, ну и на запуск установленного исполняемого файла.
Такие темы нужно более детально расписывать.

R.i.m.s.k.y.
03-10-2017, 15:08
ZVSRus, уот энто уот фсио на энтой странице
я пыталсо F1 но не алё

vk_k14m@vk
03-10-2017, 16:43
Извиняюсь, с чего началась тема подзабыл.
"распакованные" файлы, запакованные файлы, батник, консоль. Только "кинуть на него архива для распаковки" и "кинуть папку для запаковки" - Тяжело сразу понять данное ассорти. Я понимаю это игра. Мне подумалось что одни файлы нужно распаковать через один чекбокс, другие через другой чекбокс, сделать проверку на данные чекбоксы, ну и на запуск установленного исполняемого файла.
Такие темы нужно более детально расписывать. »
С чего все началось. Есть игра. Она хранит свои файлы в архивах *.рр. Есть выборочная установка которая должна на выбор ставить разные файлы в этих архивах. Архивы довольно много весит, и запаковывать каждый вариант одного архива дорого в плане места. По этому я принял решение "запаковывать распакованные" *.рр архивы, а потом, в конце установки все их запаковывать через *.bat файл.

Так установка прекрасно работает. Но если кто-то установил чистый вариант игры, а потом решит что-то добавить? Тот батник уже не будет правильно работать, и придется полностью удалять игру и ставить заново. По этому нужен второй батник, который перед началом установки будет делать обратное действие - распаковывать эти *.рр архивы что б их можно было дополнить, и опять в конце установки запаковать.

Сначала я хотел что б этот второй батник запускался только в том случае, если эта игра уже была установлена и установщик запускают второй раз. Но не сложилось. Остановился на том что он всегда будет запускаться. И если файлов для распаковки нет, то он работает в холостую...

ZVSRus
03-10-2017, 18:11
vk_k14m@vk
Это полный пи....! Набор ахинейских фраз и предложений. Вы хоть понимаете что вам на 3 страницы писанины никто не может ответить, потому что никто толком не может вас понять до конца. На 213 странице где ваш скрип, это каша, Check: AA2Decrypt_unpack; чековая проверка пишется в конце строки (я вставляю данную проверку перед флагами). В секции [Files]
все строки должны начинаться с Source: (во всяком случае чековую проверку в начале строки никогда не встречал). У вас есть чековая функция Function AA2Decrypt_unpack():boolean;, а где сам чекбокс, или что у вас там, я нигде не нашел то, на что ссылается данная проверка.
Artificial Academy 2* это так и должно быть, или все же между двойкой и звездочкой должна стоять наклонная черта.
Source: "D:\Inno Setup\Installer\2a [AA2][Uncensor][3D MK-III][FA][v2.0][Various]\Artificial Academy 2*"; - почти все строки так.
Я понял только одно: У вас 2 батника, один распаковывается во временную папку и от туда через код запускается. DestDir: "{tmp}";
Source: "D:\Inno Setup\Installer\0 Delete after install\AA2Decrypt_unpack.bat"; DestDir: "{tmp}"; BeforeInstall: ChangeCaption('AA2Decrypt_unpack.bat'); AfterInstall: install_this_file; Check: AA2Decrypt_unpack;
Второй батник в конце установки через секцию [Run] что то упаковывает. Все остальные папки что в секции [Files] через те или иные компоненты что в секции [Components] устанавливаются в директорию DefaultDirName=D:\Games\{#MyAppName}. Теперь вопрос, что нужно запускать или устанавливать через чекбокс или через что другое?
Объясните подробно но кратко, своими простыми словами.

vk_k14m@vk
03-10-2017, 18:53
ZVSRus, как раз это

Function Уже_установленное_приложение():boolean;
begin
if это_приложение_уже_установлено then Result := True else Result := False;
end;

я удалил. По тому что оно не работает. И нет объяснений как оно должно работать. А между двойкой и звездочкой должна стоять наклонная черта. Но я их специально по убирал что б протестировать работу установщика, и не ждать 8 часов пока все запакуется.

Check: у меня в начале по тому что я скопировал ее из этого поста.
это можно сделать через [Files] BeforeInstall, CurStepChanged, CurPageChanged и NextButtonClick
Я обычно делаю так

[Files]
Check: Уже_установленное_приложение; Source: сразу_извлекается_и_запускается_этот_файл.exe; DestDir: {tmp}; BeforeInstall: ChangeCaption('Установка этого файла'); AfterInstall: install_this_file; Flags: ignoreversion recursesubdirs createallsubdirs;
...
Source: Твои файлы...
[Сode]
procedure install_this_file();
var res:integer; file, path : string;
begin
file := ExpandConstant('{tmp}\сразу_извлекается_и_запускается_этот_файл.exe'); path := ExpandConstant('{tmp}');
if FileExists(file) then Exec(file, ' параметры',path,SW_SHOW,ewWaitUntilTerminated,res) else MsgBox('Файл') + ' ' + file + #13#10 + 'не найден'), mbInformation, MB_OK);
end;
Function Уже_установленное_приложение():boolean;
begin
if это_приложение_уже_установлено then Result := True else Result := False;
end; »

И как можно заметить, там Check: в начале.

Сейчас у меня все выглядит так:
; Этот сценарий создан с помощью Мастера Inno Setup.
; ОБРАТИТЕСЬ К СПРАВОЧНОЙ ДОКУМЕНТАЦИИ, ЧТОБЫ ИСПОЛЬЗОВАТЬ ВСЕ ВОЗМОЖНОСТИ INNO SETUP!

#define MyAppName "Artificial Academy 2"
#define MyAppVersion "2.0.1"
#define MyAppPublisher "Illusion"
#define MyAppExeName "AA2Play.exe"

[Setup]
; Примечание: Значение AppId является уникальным идентификатором для этого приложения.
; Не используйте одно и тоже значение AppId для разных приложений.
; (Для создания нового значения GUID, выберите в меню "Инструменты" пункт "Создать GUID".)
AppId={{37EDDB6D-1F9B-474F-8FF4-57CC8277B1A7}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName=D:\Games\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=D:\Inno Setup
OutputBaseFilename=setup
SetupIconFile=D:\Inno Setup\Installer\ico.ico
WizardImageFile=D:\Inno Setup\Installer\WizardImage.bmp
WizardSmallImageFile=D:\Inno Setup\Installer\WizardSmallImage.bmp
Compression=lzma2/ultra64
SolidCompression=yes
DiskSpanning=yes
DiskSliceSize=1536000000

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Components]
Name: "Main"; Description: "Artificial Academy 2"; Types: full compact custom; Flags: fixed
Name: "Anticensor"; Description: "Антицензор"; Types: custom
Name: "Anticensor\MKIII"; Description: "МКIII"; Types: custom; Flags: exclusive
Name: "Anticensor\MKIII\clothes"; Description: "Пак одежды для MKIII анцензора"; Types: custom; Flags: exclusive
Name: "Anticensor\MKIII\clothes\garter_belt"; Description: "Аддон на подвязки"; Types: custom;
Name: "Anticensor\SVII"; Description: "SVII"; Types: custom; Flags: exclusive
Name: "Anticensor\SVII\clothes"; Description: "Пак одежды для SVII анцензора"; Types: custom; Flags: exclusive
Name: "Anticensor\SVII\clothes\texture"; Description: "Пак текстур для одежды"; Types: custom;
Name: "Anticensor\SVII\clothes\extra_a"; Description: "Extra A пак одежды для SVII анцензора"; Types: custom;
Name: "Anticensor\SVII\clothes\extra_a\texture"; Description: "Пак тестур для одежды Extra A"; Types: custom;
Name: "Anticensor\SVII\clothes\extra_h5"; Description: "Extra H5 пак одежды для SVII анцензора"; Types: custom;
Name: "Anticensor\SVII\clothes\extra_h5\texture"; Description: "Пак тестур для одежды Extra H5"; Types: custom;
Name: "Anticensor\SVII\clothes\garter_belt"; Description: "Аддон на подвязки"; Types: custom;
Name: "Hairpack"; Description: "Пак дополнительных причесок"; Types: custom;
Name: "Override"; Description: "Пак дополнительных лиц и причесок"; Types: custom;
Name: "Russification"; Description: "Русификатор"; Types: custom;
Name: "Russification\Hlimitation_yes"; Description: "Ограничение H-сцен"; Types: custom; Flags: exclusive
Name: "Russification\Hlimitation_no"; Description: "Без аграничения"; Types: custom; Flags: exclusive
Name: "ProgramFiles"; Description: "Дополнительные приложения"; Types: custom;
Name: "ProgramFiles\AA2Install"; Description: "AA2Install"; Types: custom;
Name: "ProgramFiles\ReiEditAA2"; Description: "ReiEditAA2"; Types: custom;
Name: "ProgramFiles\AA2Face"; Description: "AA2Face"; Types: custom;

[Files]
Source: "D:\Inno Setup\Installer\0 Delete after install\AA2Decrypt_unpack.bat"; DestDir: "{app}"; BeforeInstall: ChangeCaption('Установка этого файла'); AfterInstall: install_this_file; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\*"; DestDir: "{app}"; Components: Main; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "D:\Inno Setup\Installer\2a [AA2][Uncensor][3D MK-III][FA][v2.0][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\MKIII; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2a1 [AA2][HEXA Clothing Collection][MK-III][v5.2][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\MKIII\clothes; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2a2 [AA2][HEXACC][Garter Belt][v1.5][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\MKIII\clothes\garter_belt; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b [AA2][SVII Uncensor][3D Pubes][All-In-One][v1.6]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b1 [AA2][SVII Clothing Collection][3D Pubes][v5.0]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b1a SVII Clothing Collection - Texture Pack v5.0\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\texture; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b2 [AA2][SVII Clothing Collection][Extra A][3D Pubes][v1.2.1]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\extra_a; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b2a SVII Clothing Collection - Extra A - Texture Pack v1.2\Artificial Academy \2*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\extra_a\texture; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b3 [AA2][SVII Clothing Collection][Extra H5][Uncensored][v1.0]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\extra_h5; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b3a SVII Clothing Collection - Extra H5 - Texture Pack v1.0\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\extra_h5\texture; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b4 [AA2][SVII Clothing Collection][Garter Belt][v1.5]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\garter_belt; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\3 [AA2][HEXA Hairpack][RE][v3.0][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Hairpack; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\4 [AA2][HEXA Override Collection][v3.5][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Override; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5a [AA2][Interface][Russian user interface v.1][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5b [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification and Anticensor; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5ba [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification and Anticensor\MKIII; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5bb [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification and Anticensor\SVII; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5bxa [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification\Hlimitation_yes and Anticensor; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5bxb [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification\Himitation_no and Anticensor; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\AA2Install v7 b3.1\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\AA2Install; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\ReiEditAA2 0.9.5.3b\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\ReiEditAA2; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\SVII Clothing Collection - ReiEdit v5.0\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\ReiEditAA2 and Anticensor\SVII; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\HEXA Override Collection - ReiEdit\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\ReiEditAA2 and Override; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\AA2Face 1.4.2\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\AA2Face; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\0 Delete after install\Artificial Academy 2\*"; DestDir: "{app}"; Components: Main; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall solidbreak
; Примечание: Не используйте' флаги "ignoreversion" для общих системных файлов.

[Code]
procedure install_this_file();
var res:integer; file, path : string;
begin
file := ExpandConstant('{app}\AA2Decrypt_unpack.bat'); path := ExpandConstant('{app}');
if FileExists(file) then Exec(file, 'параметры',path,SW_SHOW,ewWaitUntilTerminated,res) else MsgBox('Файл' + ' ' + file + #13#10 + 'не найден', mbInformation, MB_OK);
end;

procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\data\AA2Decrypt.bat"; WorkingDir: {app}/data; Description: Упаковка папок...; Flags: waituntilterminated

[UninstallDelete]
Name: {app}\data\*.pp; Type: files
AA2Decrypt.bat - должен всегда запускаться после распаковки всех файлов.
AA2Decrypt_unpack.bat - хотелось бы что б запускался только при повторной установке. Тоесть я установил приложение. А потом снова запускаю установщик, и в самом начале извлекается и запускается самый первый файл из списка - AA2Decrypt_unpack.bat. Пока он работает дальнейшее извлечение файлов не идет. И только когда этот батник закрывается, установка (извлечение) продолжится в обычном режиме. Это я уже все подробно расписывал...

R.i.m.s.k.y.
03-10-2017, 20:28
И нет объяснений как оно должно работать »
ничоси! https://avg.club/styles/images/smiles/bububu.gif
а это что? (http://forum.oszone.net/post-2768073-2142.html)

vk_k14m@vk
03-10-2017, 20:40
ничоси!
а это что? »
Функции с именем Уже_установленное_приложение быть не может. InnoSetup ругается на букву У. Так что твой код уже не правильный.

R.i.m.s.k.y.
03-10-2017, 21:08
Функции с именем Уже_установленное_приложение быть не может. »
молодец, половину логической цепочки догадался, вторая половина - подставить собственное название и собственную проверку вместо это_приложение_уже_установлено
ну ясен-красен что это пример с аллегорией

ZVSRus
03-10-2017, 21:15
vk_k14m@vk
Загляни в личку.

R.i.m.s.k.y.
Извиняюсь, но вы тоже не правы, человеку нужно готовое решение.
Вы же видите что ему в не догадку поменять это_приложение_уже_установлено например на if AA2Decrypt_unpack then Result := True else Result := False;, придет время и он будет подсказывать.




© OSzone.net 2001-2012