Войти

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


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

Optitron
04-11-2013, 18:54
Подскажите плиз, как сделать так, чтобы при выборе 2 компонентов (Flags: exlusive):
1) при выборе 1 компонента создавался деинсталлятор
2) при выборе 2 компонентов не создавался деинсталлятор.
Если нельзя через компоненты сделать, то может быть через Tasks можно.
Заранее Спасибо!

alexxxdar@vk
04-11-2013, 19:28
ATTACUE

01. Но я не могу найти игру в реестре по пути reg:HKLM\SOFTWARE\ (Там нет папки World_Of_Tanks)

02. Ты меня не понял, у меня уже установленная игра World_Of_Tanks. В ней есть папка Audio, она лежит в папке res. Мне нужно чтоб установщик скопировал эту папку из папки res в папку res_mods, то есть как-то так:
[Files]
Source: "{app}\res\audio\*"; DestDir: "{app}\res_mods"; Flags: recursesubdirs

03. Команда RemoveDir(ExpandConstant('{app}\res_mods')); мне нравится только куда её вставить хз

ATTACUE
04-11-2013, 20:36
alexxxdar@vk,

01. Если устанавливал, должна быть, только вот она может называться по-другому, (это нужно учитывать)
если честно - даже и не знаю как называется она, так как не играю в танки.
Как вариант - ветка HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Всякие_папки
и просмотреть их, если конечно система 64-битная.
Тем не менее все равно в скрипте указывается без Wow6432Node, так как если приложение 32-битное, оно (вроде бы как)
скопируется, по крайней мере у меня значения проверяет корректно.
Если игра представляет собой архив без установочника, то в этом случае в реестре ты не найдешь нужные тебе ключи.

02. и 03. Поискав по форуму, наткнулся на это, там есть пара примеров, которые ты можешь приспособить под себя
FAQ по Inno Setup (http://victor-dobrov.narod.ru/InnoSetupFAQ_ru-board.chm)

alexxxdar@vk
05-11-2013, 02:35
ATTACUE,

Спасибо за помощь! Что-то я прочитал документ который ты мне скинул, нашел пару функций которые мне нужно, но нифига не получается... Копирую нужные коды в раздел [Code] прописываю свои пути и ничего не работает, или вообще ошибки выбивает при компиляции, кароче я в этом ничего не понимаю...

ATTACUE
05-11-2013, 14:30
alexxxdar@vk,
Большинство ошибок при компиляции - очевидны, посмотри на них.
Возможно просто отсутствует знак ";"
или продублирован идентификатор
или какая-то функция не прописана в начале секции [code].
Если используешь сторонние или ранее написанные скрипты как модули - ошибки могут быть и в них,
и в этом случае в ошибке прописывается - какой модуль и путь до него.
Попробуй немного разобраться с кодом в примерах. Знаю - это сложно, но возможно тогда ты увидишь и поймешь свои ошибки.
В настройках Inno Setup включи отображение номеров строк - проще будет ориентироваться по коду.
А еще лучше - используй Inno Setup отсюда (http://innoultra.ru/).
Я бы рад бы тебе помочь с твоим скриптом, посидеть на досуге и просмотреть, но у меня не так много времени на свой скрипт, который я допиливаю, и который занимает все мое свободное время.
Посмотри этот документ (http://rghost.ru/users/Arsen19/releases/Russkaya-spravka-k-Inno-Setup) или на этой странице (http://innoultra.ru/?page_id=18) тоже есть интересные примеры (например Бекап файлов).
Уверен - они тебе не раз помогут.
К сожалению больше ни чем конструктивным помочь я не смогу.

alexxxdar@vk
05-11-2013, 15:32
ATTACUE,

Уже вроде как получилось!
Посмотри, правильный код?
Это код на то чтоб перед установкой чистилась папка, копировалось туда нужные мне файлы а после удаления удалялось всё...

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
if DirExists(ExpandConstant('{app}\res_mods')) then
DelTree(ExpandConstant('{app}\res_mods'), True, True, True);
end;
begin
CopyDir(ExpandConstant('{app}\res\audio'),ExpandConstant('{app}\res_mods\0.8.9'));
end;
begin
CopyDir(ExpandConstant('{app}\res\text'),ExpandConstant('{app}\res_mods\0.8.9'));
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
DelTree(ExpandConstant('{app}\res_mods\0.8.9\audio'), True, True, True);
end;
begin
DelTree(ExpandConstant('{app}\res_mods\0.8.9\text'), True, True, True);
end;
end;

И спасибо Большое! Реально помог))

nik1967
05-11-2013, 16:57
alexxxdar@vk, слишком много бегинов и эндов. Куда столько?procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
if DirExists(ExpandConstant('{app}\res_mods')) then begin
DelTree(ExpandConstant('{app}\res_mods'), True, True, True);
CopyDir(ExpandConstant('{app}\res\audio'),ExpandConstant('{app}\res_mods\0.8.9'));
CopyDir(ExpandConstant('{app}\res\text'),ExpandConstant('{app}\res_mods\0.8.9'));
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then begin
DelTree(ExpandConstant('{app}\res_mods\0.8.9\audio'), True, True, True);
DelTree(ExpandConstant('{app}\res_mods\0.8.9\text'), True, True, True);
end;
end;

alexxxdar@vk
05-11-2013, 17:15
nik1967,

Работает! Только возникает 2 вопроса:

01. Почему установщик копирует папку с файлами audio в {app}\res_mods\0.8.9 и также содержимое папки audio в {app}\res_mods\0.8.9

А без кода DelTree(ExpandConstant('{app}\res_mods'), True, True, True); всё нормально! В чём может быть проблема?

begin
if CurStep = ssInstall then begin
if DirExists(ExpandConstant('{app}\res_mods')) then begin
DelTree(ExpandConstant('{app}\res_mods'), True, True, True);
CopyDir(ExpandConstant('{app}\res\audio'),ExpandConstant('{app}\res_mods\0.8.9'));
CopyDir(ExpandConstant('{app}\res\text'),ExpandConstant('{app}\res_mods\0.8.9'));
end;
end;
end;

02. Почему установщик копирует папку и перед установкой, и после, что мешает установить файлы из секции [Files] ?

[Files]
Source: "E:\Игры Install\WOT\Mod Pack\Install_mods\Mods\audio\6_chuvstv\sirena1\*"; DestDir: "{app}"; Components: A\audio\6_chuvstv\sirena1; Flags: recursesubdirs

[Code]

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
if DirExists(ExpandConstant('{app}\res_mods')) then begin
DelTree(ExpandConstant('{app}\res_mods'), True, True, True);
CopyDir(ExpandConstant('{app}\res\audio'),ExpandConstant('{app}\res_mods\0.8.9'));
CopyDir(ExpandConstant('{app}\res\text'),ExpandConstant('{app}\res_mods\0.8.9'));
end;
end;
end;

Nightwishh
05-11-2013, 21:30
Здавствуйте! Хочу спросить, можно ли в ISDone заменить процедуру procedure CreateControls(); которая обрабатывается процедурой procedure CurStepChanged(CurStep: TSetupStep); на InitializeWizard();? Просто через последнюю процедуру инсталл не залипает в самом начале установки.

Антон_Мураткин@vk
06-11-2013, 08:05
ВСем доброе утро. Подскажите скрипт на удаление игры программы и т.п. Стандартный не работает почему то! пишет вот такую штуку
http://i6.imageban.ru/out/2013/11/06/cc4d310253caf2da2d9f04b5a5c673f4.jpg (http://i6.imageban.ru/out/2013/11/06/9fbda79c53a869f4a17ad02b96353ec5.jpg)
или такую
http://i3.imageban.ru/out/2013/11/06/a1b15bb49bc991752f472cadfadf6a18.jpg (http://i5.imageban.ru/out/2013/11/06/a3fe3635212e8b7a60343999b6ca6cb1.jpg)

Подскажите плиз как это всё исправить

Nordek
07-11-2013, 07:44
Подскажите скрипт на удаление игры программы и т.п. »"Вы чё ребята, издеваетесь? Тему не судьба почитать?"

Антон_Мураткин@vk, Смотри сюда (http://forum.oszone.net/post-2231042-1218.html) или не катит!?

От некоторых проблем избавит расширенная версия (http://forum.oszone.net/post-2239520-1337.html) инно.

Антон_Мураткин@vk
07-11-2013, 08:28
Nordek, Это не то. Мне надо что бы просто удалялась папка с игрой прогой или файлы в папке

И у меня стоит раширенная версия уже.

А читать тему много букв уж слишком да и подходящего видать и нет

Nordek
07-11-2013, 09:56
Мне надо что бы просто удалялась папка с игрой прогой или файлы в папке »


Самый простой способ и без заморочек, использовать секцию [UninstallDelete] - Удаление при деинсталляции:

[UninstallDelete]
Name: {app}; Type: filesandordirs

В Type указываешь то что тебе необходимо удалить:
filesandordirs - Удаляет "Файлы и/или каталоги".
files - Удаляет "Файлы" в каталоге
dirifempty - Удаляет "Каталог в том случае, если он пустой"

Если же нужно удалить перед установкой, то используй секцию [InstallDelete].

nik1967
07-11-2013, 12:35
Антон_Мураткин@vk, а ты случайно в инсталл не пакуешь unins000.dat и (или) unins000.exe? Что то похоже на то.

Optitron
07-11-2013, 19:40
Подскажите пожалуйста, как изменить в инсталляторе порядок страниц мастера установки. Например: Выбор папки в меню пуск стоял перед перед выбором пути установки.

Nordek
08-11-2013, 00:24
Например: Выбор папки в меню пуск стоял перед перед выбором пути установки. »

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

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


Name: {group}\My Program; Filename: {app}\MyProg.exe
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}

[Files]
Source:compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Messages]
russian.WizardSelectProgramGroup=Выбор папки установки
default.WizardSelectProgramGroup=Select Destination Location
russian.SelectStartMenuFolderDesc=В какую папку вы хотите установить [name]?
default.SelectStartMenuFolderDesc=Where should [name] be installed?
russian.WizardSelectDir=Выберите папку в меню «Пуск»
default.WizardSelectDir=Select Start Menu Folder
russian.SelectDirDesc=Где программа установки должна создать ярлыки?
default.SelectDirDesc=Where should Setup place the program's shortcuts?

[Co[I]de]
procedure InitializeWizard();
begin
WizardForm.SelectDirBitmapImage.Parent := WizardForm.SelectProgramGroupPage;
WizardForm.SelectDirLabel.Parent := WizardForm.SelectProgramGroupPage;
WizardForm.SelectDirBrowseLabel.Parent := WizardForm.SelectProgramGroupPage;
WizardForm.DirEdit.Parent := WizardForm.SelectProgramGroupPage;
WizardForm.DirBrowseButton.Parent := WizardForm.SelectProgramGroupPage;
WizardForm.DiskSpaceLabel.Parent := WizardForm.SelectProgramGroupPage;
WizardForm.SelectGroupBitmapImage.Parent := WizardForm.SelectDirPage;
WizardForm.SelectStartMenuFolderLabel.Parent := WizardForm.SelectDirPage;
WizardForm.SelectStartMenuFolderBrowseLabel.Parent := WizardForm.SelectDirPage;
WizardForm.GroupEdit.Parent := WizardForm.SelectDirPage;
WizardForm.GroupBrowseButton.Parent := WizardForm.SelectDirPage;
WizardForm.NoIconsCheck.Parent := WizardForm.SelectDirPage;
end;


Меняй то что находится в InnerNotebook, я к тому что трогать MainPanel не нужно.
За перемещение в InnerNotebook отвечает Parent :=
А для изменения описаний те что находятся в MainPanel, достаточно переставить их местами в секции [Messages].

Антон_Мураткин@vk
08-11-2013, 13:09
Антон_Мураткин@vk, а ты случайно в инсталл не пакуешь unins000.dat и (или) unins000.exe? Что то похоже на то. » Нет не покую его

Nordek, А куда лучше это вписывать? перед какой секцией

Optitron
08-11-2013, 21:11
Nordek, Благодарю за ответ!
Есть ещё вопрос, при наличии 5 exclusive компонентов каждый раз при запуске инсталлятора по умолчанию ставится рандомный компонент, можно как-нибудь это исправить? Чтобы по умолчанию всегда был 1 компонент из списка.

ATTACUE
08-11-2013, 21:24
alexxxdar@vk,
Не за что))
Пардон за поздний ответ.
Если в секции [files] фигурируют папка audio, которая тебе нужна - // закомментируй эту строчку
Оставь только то, что было у тебя в секции [code]

Если оформлять копирование через секцию [files], то если я не ошибаюсь, то ее нужно связывать как-то с секцией [tasks]
и в этом случае в секции [code] нужно закомментировать те задачи, которые выполняет [tasks].
Опять же - я могу и ошибаться, так как я далеко не профи.

Если удаляешь файлы через секцию [unistalldelete] то файлы прописываются именно в этой секции,
выглядит это как-то так
Type: files; Name: "{app}\папка_0\папка_1\папка_2\file_1.mp3";
Type: files; Name: "{app}\папка_0\папка_1\file_1.mp3";
Type: files; Name: "{app}\папка_0\file_1.mp3";
проверка на наличие пустых папок осуществляется в [code]
с помощью RemoveDir
(то есть это даже не проверка, но удаляет папку, если она пустая и это иногда бывает необходимо)
(DelTree более "беспощадная")

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
// RemoveDir удалит только, если папка пустая
// Порядок удаление определен ниже:
// Папка 2
RemoveDir(ExpandConstant('{app}\папка_0\папка_1\папка_2'));
// папка 1
RemoveDir(ExpandConstant('{app}\папка_0\папка_1\'));
// Главная папка (папка_0)
RemoveDir(ExpandConstant('{app}\папка_0\'));
end;
end;

Nordek
08-11-2013, 23:05
А куда лучше это вписывать? »

С удалением перед установкой
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

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

[Icons]
Name: {group}\My Program; Filename: {app}\MyProg.exe
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}

[Files]
Source:compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[InstallDelete]
Name: {app}; Type: filesandordirs

С удалением при деинсталляции
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

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

[Icons]
Name: {group}\My Program; Filename: {app}\MyProg.exe
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}

[Files]
Source:compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[UninstallDelete]
Name: {app}; Type: filesandordirs

С удалением удалением перед установкой и удалением при деинсталляции
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

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

[Icons]
Name: {group}\My Program; Filename: {app}\MyProg.exe
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}

[Files]
Source:compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[InstallDelete]
Name: {app}; Type: filesandordirs

[UninstallDelete]
Name: {app}; Type: filesandordirs

[UninstallDelete]
Name: {app}; Type: filesandordirs


[UninstallDelete]
Name: {app}; Type: files


[UninstallDelete]
Name: {app}; Type: dirifempty


[InstallDelete]
Name: {app}; Type: filesandordirs


[InstallDelete]
Name: {app}; Type: files


[InstallDelete]
Name: {app}; Type: dirifempty




© OSzone.net 2001-2012