Войти

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


Страниц : 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

audiofeel
13-03-2013, 11:04
здравствуйте, помогите - допустим (только допустим) есть фаилы общий размер которых превышает DVD5, нужно что бы они копировались как внешние (Flags: external overwritereadonly ignoreversion). а теперь сам вопрос - как заставить этот Inno Setup что бы он попросил поменять, ну или перевернуть диск

Tco 03
13-03-2013, 12:05
audiofeel
Вот, когда-то, где-то нашёл вот такой скрипт.

Скрипт для установки архивов, записанных на двух DVD. На примере показано извлечение из 7z SFX-архивов.

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
OutputBaseFilename=setup
Compression=none
OutputDir=C:\Output
SolidCompression=no

[Files]
;На диске рядом с инсталлятором размещаем папку EmptyFiles, в которую помещаем "файлы-пустышки" игры.
;Сначала выполняется первый архив (последовательность AfterInstall должна быть такой)
Source: "{src}\EmptyFiles\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs external; AfterInstall: InstallFirstArchive
;А затем второй
Source: "{src}\EmptyFiles\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs external; AfterInstall: CheckSelectedDisk

[ Code]
//На странице установки отключаем подтверждающее сообщение (чтобы не было проблем с откатом)
procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:=True;
If CurPage=12 then
begin
Confirm:=False;
end;
end;

//Устанавливаем первый 7z SFX (Pack1.exe) архив, находящийся на первом диске (рядом с инсталлятором)
//Никаких сообщений об ошибках и т.д. не применяем, т.к. вся ответственность должна лежать на распространителе
procedure InstallFirstArchive;
var
res:Integer;
s,s1:string;
begin
s:=ExpandConstant('{app}');
s1:=ExpandConstant('{src}')+'\Pack1.exe';
Exec(s1, '-y -o"'+ s + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, Res);
end;

//Затем выводим соответствующее сообщение для вставки второго диска со вторым архивом
procedure CheckSelectedDisk;
var
res:Integer;
s,s2:string;
Confirm: Boolean;
begin
s:=ExpandConstant('{app}');
s2:=ExpandConstant('{src}')+'\Pack2.exe';
//Если второго архива рядом нету (мало ли, в будущем игра будет записана на двуслойном диске)
if not Exec(s2, '-y -o"'+ s + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, Res) then
//то тогда выводим сообщение
case MsgBox('Для дальнейшей установки требуется файл '''+ s2 +'''!'#13#13 +
'Вставьте второй DVD, содержащий архив, и нажмите "OK".' #13#13 +
'Нажмите "Отмена", чтобы прекратить дальнейшую установку.', mbInformation, MB_OKCANCEL)
of IDCANCEL:
begin
//Выполняем откат действий при отмене
Confirm:=False;
WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
end
IDOK:
begin
CheckSelectedDisk;
end;
end;
end;

saurn
13-03-2013, 12:13
neorom


[Setup]
AppName=Microsoft® Windows® XP Ukrainian User Interface Pack
AppVerName=Microsoft® Windows® XP Ukrainian Multilingual User Interface Pack
AppPublisher=Music Mix Studio© & Records Company® 2006-2008
AppPublisherURL=http://winxp.org.ua
AppSupportURL=http://winxp.org.ua
AppUpdatesURL=http://winxp.org.ua
CreateAppDir=no
OutputBaseFilename=setup1
Compression=lzma
Uninstallable=no
PrivilegesRequired=none
DisableProgramGroupPage=yes
LicenseFile=embedded\License.txt
InfoBeforeFile=embedded\InfoBefore.txt
InfoAfterFile=embedded\InfoAfter.txt
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
Source: {tmp}\*.*; DestDir: {tmp}\mui; Flags: ignoreversion;

[Run]
Filename: {tmp}\mui\muisetup_ru_sp2.exe; Parameters: /i 0422 /d 0422 /l /f /r /s; Components: sp2comp; Tasks: sp2;
Filename: {tmp}\mui\muisetup_ru_sp3.exe; Parameters: /i 0422 /d 0422 /l /f /r /s; Components: sp3comp; Tasks: sp3;
Filename: {tmp}\mui\muisetup_ru_sp2.exe; Components: sp2comp; Tasks: sp2m;
Filename: {tmp}\mui\muisetup_ru_sp3.exe; Components: sp3comp; Tasks: sp3m;
Filename: {tmp}\mui\wmp_8_mui.cmd; Tasks: mp8;
Filename: {tmp}\mui\wmp_9_mui.cmd; Tasks: mp9;
Filename: {tmp}\mui\wmp_10_mui.cmd; Tasks: mp10;
Filename: {tmp}\mui\wmp_11_mui.cmd; Tasks: mp11;

[Tasks]
Name: sp2; Description: Автоматичне встановлення (рекомендовано); GroupDescription: Виберіть режим встановлення; Components: sp2comp; Flags: exclusive;
Name: sp3; Description: Автоматичне встановлення (рекомендовано); GroupDescription: Виберіть режим встановлення; Components: sp3comp; Flags: exclusive;
Name: sp2m; Description: Ручне встановлення; GroupDescription: Виберіть режим встановлення; Components: sp2comp; Flags: exclusive unchecked;
Name: sp3m; Description: Ручне встановлення; GroupDescription: Виберіть режим встановлення; Components: sp3comp; Flags: exclusive unchecked;
Name: mp8; Description: 8; GroupDescription: Оберіть версію встановленого Медіа Програвача; Flags: exclusive unchecked;
Name: mp9; Description: 9; GroupDescription: Оберіть версію встановленого Медіа Програвача; Flags: exclusive unchecked;
Name: mp10; Description: 10; GroupDescription: Оберіть версію встановленого Медіа Програвача; Flags: exclusive;
Name: mp11; Description: 11; GroupDescription: Оберіть версію встановленого Медіа Програвача; Flags: exclusive unchecked;

[Components]
Name: sp2comp; Description: Service Pack 2; Types: sp2os;
Name: sp3comp; Description: Service Pack 3; Types: sp3os;

[Types]
Name: sp3os; Description: Service Pack 3;
Name: sp2os; Description: Service Pack 2;

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

neorom
13-03-2013, 13:02
saurn спасибо тебе, все за роботало !!!

Tco 03
13-03-2013, 15:58
Господа, возможно ли при инсталляции программы удалить ключ реестра созданный другой программой? Ну что-то типа [InstallDelete] или каким-нибудь другим способом :)

Mailchik
13-03-2013, 18:21
Tco 03, function RegDeleteKeyIncludingSubkeys(const RootKey: Integer;
const SubkeyName: String): Boolean; //-----удаляет ключ реестра включая подключи
function RegDeleteKeyIfEmpty(const RootKey: Integer;
const SubkeyName: String): Boolean; //-----удаляет ключ реестра, если он пустой
function RegDeleteValue(const RootKey: Integer;
const SubKeyName, ValueName: String): Boolean; //-----удаляет значение ключа реестра

neorom
13-03-2013, 18:51
Как мне зделать скрипт чтоб после компиляции било єто http://s3.share.te.ua/496912/99.JPG (http://s3.share.te.ua/b496912/99.JPG) Просьба привести пример скрипта.

saurn
13-03-2013, 19:00
Tco 03
Например, на этапе установки, так:


procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
if RegKeyExists(HKLM, 'SOFTWARE\MyProgram') then //поиск ключа
begin
RegDeleteKeyIncludingSubkeys(HKLM, 'SOFTWARE\MyProgram'); //если ключ найден, удаление ключа и всего, что в нем есть.
end;
end;
end;

Tco 03
13-03-2013, 19:34
Как мне зделать скрипт чтоб после компиляции било єто Просьба привести пример скрипта »
Это архивы созданные не Inno Setup, а другими архиваторами, например FreeArc

bosenkov5
13-03-2013, 20:40
alert30, нет у меня есть уже скрипт и я не хотел бы его менять

Fortress1
13-03-2013, 21:01
alert30, нет у меня есть уже скрипт и я не хотел бы его менять »
Отредактируйте свой и добавьте туда данные из того, что выдаст вам GameScript Generator, и будет вам счастье

El Sanchez
13-03-2013, 23:17
возможно ли при инсталляции программы удалить ключ реестра созданный другой программой? Ну что-то типа [InstallDelete] или каким-нибудь другим способом »
Tco 03, через секцию [Registry] просто:

[Registry]
Root: HKLM; Subkey: SOFTWARE\My Company; Flags: deletekey dontcreatekey

audiofeel
14-03-2013, 01:51
Tco 03, Этот пример у меня есть, я его пробовал (у меня без 7Z) = фаилы копируются по два раза - как исправить? (у меня на каждом диске лежит папка с одинаковым названием - вот из этих папок мне нужно скопировать все фаилы в папку с продуктом (изменить название папки в {src}\ нельзя)) а они копируются по два раза (и это на первом "диске" - второй диск эмулировать не стал) но подсунул фаилы после запроса второго "архива" и ноль эмоций

Tco 03
14-03-2013, 14:59
audiofeel
у меня на каждом диске лежит папка с одинаковым названием »
Если папки одинаковые, тогда делайте проверку на присутствие файлов...
Вот набросал пример (с разными папками) какая разница с какими именами папки на диске, они же копируются в заданный каталог, где указывается что и куда скопировать.
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
OutputBaseFilename=setup
Compression=none
OutputDir=.
SolidCompression=no

[Files]
Source: "{src}\Folder 1\*"; DestDir: "{app}"; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: "{src}\Folder 2\*"; DestDir: "{app}"; Flags: external ignoreversion recursesubdirs createallsubdirs; BeforeInstall: CopySecondFolder;

[ Code]
procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:= True;
if CurPage = 12 then
begin
Confirm:= False;
end;
end;

procedure CopySecondFolder;
var
Confirm: Boolean;
begin
if not DirExists(ExpandConstant('{src}\Folder 2')) then
case MsgBox('Для дальнейшей установки необходм второй диск!'#13#13 +
'Вставьте второй DVD и нажмите "OK".' #13#13 +
'Нажмите "Отмена", чтобы прекратить дальнейшую установку.', mbInformation, MB_OKCANCEL)
of IDCANCEL:
begin
Confirm:= False;
WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
end
IDOK:
begin
CopySecondFolder;
end;
end;
end;

insombia
14-03-2013, 19:14
del

audiofeel
14-03-2013, 21:15
Tco 03, после запроса диска ложу фаилы со второго диска = ноль эмоций, молчание


[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
OutputBaseFilename=setup
Compression=none
OutputDir=.
SolidCompression=no

[Files]
Source: {src}\GameFiles\*; DestDir: {app}; Flags: external ignoreversion

Source: {src}\GameFiles\GAME3.DAT; DestDir: {app}; Flags: external ignoreversion; BeforeInstall: CopySecondFolder
Source: {src}\GameFiles\GAME5.DAT; DestDir: {app}; Flags: external ignoreversion; BeforeInstall: CopySecondFolder
Source: {src}\GameFiles\GAME6.DAT; DestDir: {app}; Flags: external ignoreversion; BeforeInstall: CopySecondFolder
Source: {src}\Docs\GB\Eula.rtf; DestDir: {app}\Docs; Flags: external ignoreversion; BeforeInstall: CopySecondFolder
Source: {src}\Docs\GB\Readme.rtf; DestDir: {app}\Docs; Flags: external ignoreversion; BeforeInstall: CopySecondFolder

//[ Code]
procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:= True;
if CurPage = 12 then
begin
Confirm:= False;
end;
end;

procedure CopySecondFolder;
var
Confirm: Boolean;
begin
if not DirExists(ExpandConstant('{src}\GameFiles\GAME3.DAT')) then
case MsgBox('Äëÿ äàëüíåéøåé óñòàíîâêè íåîáõîäèì âòîðîé äèñê!'#13#13 +
'Âñòàâüòå âòîðîé DVD è íàæìèòå "OK".' #13#13 +
'Íàæìèòå "Îòìåíà", ÷òîáû ïðåêðàòèòü äàëüíåéøóþ óñòàíîâêó.', mbInformation, MB_OKCANCEL)
of IDCANCEL:
begin
Confirm:= False;
WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
end
IDOK:
begin
CopySecondFolder;
end;
end;
end;

saurn
14-03-2013, 21:56
audiofeel

Если ищите на втором диске не папку, а файл, то вот эту строку в скрипте:
if not DirExists(ExpandConstant('{src}\GameFiles\GAME3.DAT')) then

Замените на эту:

if not FileExists(ExpandConstant('{src}\GameFiles\GAME3.DAT')) then

Ну и потому что файлы внешние анимация прогресс бара не будет отображатся , как положено. Тоесть при копирование с первого диска прогресс будет заполнятся равномерно, когда дойдет до 100, вывалится запрос на другой диск, и после вставки диска прогресс будет стоять на месте на 100%, но при этом файлы будут копироватся. Возможно, знающие люди смогут подсказать, как всё это правильно релизовать.

audiofeel
14-03-2013, 23:39
Ну и потому что файлы внешние анимация прогресс бара не будет отображатся , как положено. Тоесть при копирование с первого диска прогресс будет заполнятся равномерно, когда дойдет до 100, вывалится запрос на другой диск, и после вставки диска прогресс будет стоять на месте на 100%, но при этом файлы будут копироватся. » А если подставить размеры фаилов при помощи "ExternalSize" но тогда вопрос какой размер лучше вписывать, ( 1 = размер: 2,25KB(2 311 байт) 2 = На диске 4,00 КВ(4 096 байт)

alert30
15-03-2013, 09:23
Как мне зделать скрипт чтоб после компиляции »
Надо снять галочку "Компилировать через загрузчик" (как-то так) через утилиты ISTool, или Inno Setup Script Studio или InnoIDE.

Dark_Delphin
15-03-2013, 23:32
Подскажите, пожалуйста, как инасталлятору сделать стандартный скин:

http://i51.fastpic.ru/big/2013/0315/9f/9a80973cd03809f017416be36a2a219f.png




© OSzone.net 2001-2012