Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]
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')); мне нравится только куда её вставить хз
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] прописываю свои пути и ничего не работает, или вообще ошибки выбивает при компиляции, кароче я в этом ничего не понимаю...
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;
И спасибо Большое! Реально помог))
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)
Подскажите плиз как это всё исправить
Подскажите скрипт на удаление игры программы и т.п. »"Вы чё ребята, издеваетесь? Тему не судьба почитать?"
Антон_Мураткин@vk, Смотри сюда (http://forum.oszone.net/post-2231042-1218.html) или не катит!?
От некоторых проблем избавит расширенная версия (http://forum.oszone.net/post-2239520-1337.html) инно.
Антон_Мураткин@vk
07-11-2013, 08:28
Nordek, Это не то. Мне надо что бы просто удалялась папка с игрой прогой или файлы в папке
И у меня стоит раширенная версия уже.
А читать тему много букв уж слишком да и подходящего видать и нет
Мне надо что бы просто удалялась папка с игрой прогой или файлы в папке »
Самый простой способ и без заморочек, использовать секцию [UninstallDelete] - Удаление при деинсталляции:
[UninstallDelete]
Name: {app}; Type: filesandordirs
В Type указываешь то что тебе необходимо удалить:
filesandordirs - Удаляет "Файлы и/или каталоги".
files - Удаляет "Файлы" в каталоге
dirifempty - Удаляет "Каталог в том случае, если он пустой"
Если же нужно удалить перед установкой, то используй секцию [InstallDelete].
Антон_Мураткин@vk, а ты случайно в инсталл не пакуешь unins000.dat и (или) unins000.exe? Что то похоже на то.
Optitron
07-11-2013, 19:40
Подскажите пожалуйста, как изменить в инсталляторе порядок страниц мастера установки. Например: Выбор папки в меню пуск стоял перед перед выбором пути установки.
Например: Выбор папки в меню пуск стоял перед перед выбором пути установки. »
[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 компонент из списка.
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;
А куда лучше это вписывать? »
С удалением перед установкой
[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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.