Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
Rekit_403
17-10-2014, 00:08
Доброй ночи ребята.
Как реализовать подкачку модов из сети в установщике?
Т.е. моды, которые много весят будут докачивать с различных файлообменников.
Есть ли какой-то пример, как реализовать данное чудо?
Заранее благодарю всех кто поможет.
Есть ли какой-то пример, как реализовать данное чудо? »
Загрузка файла из Интернет (http://forum.oszone.net/post-2267694-1626.html)
InnoTools Downloader (http://www.sherlocksoftware.org/page.php?id=50)
audiofeel
17-10-2014, 08:11
подскажите, кто знает как "вызвать" это сообщение в левом верхнем углу в конце успешного выполнения чего либо, не кастомно а "вызвать", выпросить :) у Windows ????
http://rghost.ru/58564527/thumb.png (http://rghost.ru/58564527.view)
с твоим вариантом получилось со стандартным прогрессбаром а надо прогрессбары ISDone »
А ISDone прогресс бар - это что? Я дал пример, а как его прикрутить к своему скрипту - это уже Ваша задача.
Kashtan007
18-10-2014, 16:13
Здравствуйте, есть вопрос к El Sanchez.
Страницами раньше вы помогли мне с бекапом и удалением компонентов. Тык (http://forum.oszone.net/post-2406260-1608.html)
Так вот я только обнаружил проблему...
Удалением модов происходит после установки компонентов.
Т.е. сначала производится бекап, потом установка компонетов, а потом оно удаляет и старые компоненты и те которые только что установились.
Как изменить этот порядок?
Чтобы удаление происходило перед установкой новых компонетов?
Заранее спасибо за ответ!
El Sanchez
19-10-2014, 10:44
Удалением модов происходит после установки компонентов.
Т.е. сначала производится бекап, потом установка компонетов, а потом оно удаляет и старые компоненты и те которые только что установились.
Как изменить этот порядок?
Чтобы удаление происходило перед установкой новых компонетов? »
Kashtan007,
[Setup]
AppName=test2
AppVerName=test2
DefaultDirName=D:\test
[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl
[CustomMessages]
ru.DeleteOldMods=Удалить все старые моды
ru.CreateBackupOldMods=Сохранить бекап старых модов
ru.DeletingOldMods=Удаление старых модов...
ru.RestoringOldMods=Восстановление старых модов...
[Files]
Source: {app}\res_mods\*; DestDir: {app}\ModPack\BackUp\res_mods; Flags: external createallsubdirs recursesubdirs skipifsourcedoesntexist; AfterInstall: DeleteFiles(ExpandConstant('{app}\res_mods\*'), True); Check: IsOldMods('CreateBackupOldMods')
Source: {app}\path.file; DestDir: {app}\ModPack\OriginalFiles; Flags: external skipifsourcedoesntexist; AfterInstall: DeleteFiles(ExpandConstant('{app}\path.file'), False)
[UninstallRun]
Filename: {cmd}; Parameters: "/c xcopy /ecihry ""{app}\ModPack\BackUp\res_mods"" ""{app}\res_mods\"""; StatusMsg: {cm:DeletingOldMods}; Flags: runhidden; Check: IsOldMods('CreateBackupOldMods')
Filename: {cmd}; Parameters: "/c xcopy /ecihry ""{app}\ModPack\OriginalFiles\path.file"" ""{app}\"""; Flags: runhidden
[Code]
var
OldModsListBox: TNewCheckListBox;
///////////////////////////////////////////////
function IsOldMods(const Msg: String): Boolean;
begin
with OldModsListBox do
Result := Checked[Items.IndexOf(CustomMessage(Msg))]
end;
//////////////////////////////
procedure CreateSelectDirPage;
var
rt: TRect;
begin
OldModsListBox := TNewCheckListBox.Create(WizardForm);
with OldModsListBox do
begin
Parent := WizardForm.SelectDirPage;
Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(10);
Width := Parent.ClientWidth;
BorderStyle := bsNone;
ParentColor := True;
ShowLines := False;
WantTabs := True;
AddCheckBox(CustomMessage('DeleteOldMods'), '', 0, True, True, True, False, nil);
AddCheckBox(CustomMessage('CreateBackupOldMods'), '', 1, True, True, False, True, nil);
rt := ItemRect(ItemCount-1);
Height := rt.Bottom;
end;
end;
////////////////////////////////////////////////////////////////////////////
procedure DeleteFiles(const Path: String; const DeleteSubdirsAlso: Boolean);
begin
DelTree(Path, False, True, DeleteSubdirsAlso);
end;
/////////////////////////////
procedure InitializeWizard();
begin
CreateSelectDirPage;
end;
Dodakaedr
19-10-2014, 13:27
Что-то не пойму. Ошибок при компиляции нету, файл по пути имеется а вносить изменения в реестр не хочет. В чем проблема?function InitializeSetup(): Boolean;
var
RCode: Integer;
begin
Exec('regedit.exe', '/s' + '"' + ExpandConstant('{src}\Data\Settings\Settings.reg') + '"', '', SW_SHOW, ewWaitUntilTerminated, RCode);
end;
El Sanchez
19-10-2014, 14:39
В чем проблема? »
Dodakaedr, в командной строке. Где пробел, отделяющий параметры?
Kashtan007
19-10-2014, 15:18
El Sanchez, спасибо.
P.S. Протестил, но к сожалению не работает. Потому что насколько я понимаю, нигде не указано какую папку нужно очистить.
В итоге делает бекап и устанавливает компоненты, но старые не удаляет. В итоге в папке лежат и старые и новые компоненты.
El Sanchez
19-10-2014, 15:37
Потому что насколько я понимаю, нигде не указано какую папку нужно очистить. »
Kashtan007, а что по вашему делает это?
AfterInstall: DeleteFiles(ExpandConstant('{app}\res_mods\*'), True)
Kashtan007
19-10-2014, 15:54
El Sanchez, ясно, но к сожалению не удаляет.
Возможно ли сделать так как было раньше (через секцию run), только расставить последовательность действий?
Так как тут просто очистка res_mods, а хотелось бы очистку res_mods\0.9.3 и удаление xvm.
El Sanchez
19-10-2014, 19:31
Возможно ли сделать так как было раньше (через секцию run), только расставить последовательность действий? »
Kashtan007, и будет так же как и в #1845
Так как тут просто очистка res_mods, а хотелось бы очистку res_mods\0.9.3 и удаление xvm. »
Kashtan007, т.е. бекапить нужно уже не всю папку res_mods, а res_mods\0.9.3 ?
ясно, но к сожалению не удаляет. »
Kashtan007, пример-то хоть пробовали? Или в другой скрипт перенесли и под себя правили? Начните с примера:
#expr Exec("cmd", "/c md D:\test\res_mods\0.9.3\test", "", 1, SW_HIDE)
#expr Exec("cmd", "/c md D:\test\res_mods\xvm", "", 1, SW_HIDE)
#expr Exec("cmd", "/c cd.>D:\test\path.file", "", 1, SW_HIDE)
#expr Exec("cmd", "/c cd.>D:\test\res_mods\0.9.3\0.9.3.txt", "", 1, SW_HIDE)
#expr Exec("cmd", "/c cd.>D:\test\res_mods\0.9.3\test\test.txt", "", 1, SW_HIDE)
#expr Exec("cmd", "/c cd.>D:\test\res_mods\xvm\xvm.txt", "", 1, SW_HIDE)
[Setup]
AppName=test2
AppVerName=test2
DefaultDirName=D:\test
[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl
[CustomMessages]
ru.DeleteOldMods=Удалить все старые моды
ru.CreateBackupOldMods=Сохранить бекап старых модов
ru.DeletingOldMods=Удаление старых модов...
ru.RestoringOldMods=Восстановление старых модов...
[Files]
Source: {app}\res_mods\0.9.3\*; DestDir: {app}\ModPack\BackUp\res_mods\0.9.3; Flags: external createallsubdirs recursesubdirs skipifsourcedoesntexist; AfterInstall: DeleteFiles(ExpandConstant('{app}\res_mods\0.9.3\*'), True); Check: IsOldMods('CreateBackupOldMods')
Source: {app}\path.file; DestDir: {app}\ModPack\OriginalFiles; Flags: external skipifsourcedoesntexist; AfterInstall: DeleteFiles(ExpandConstant('{app}\path.file'), False)
[InstallDelete]
Type: filesandordirs; Name: {app}\res_mods\xvm\*; Check: IsOldMods('DeleteOldMods')
[UninstallRun]
Filename: {cmd}; Parameters: "/c xcopy /ecihry ""{app}\ModPack\BackUp\res_mods\0.9.3"" ""{app}\res_mods\0.9.3\"""; StatusMsg: {cm:DeletingOldMods}; Flags: runhidden; Check: IsOldMods('CreateBackupOldMods')
Filename: {cmd}; Parameters: "/c xcopy /ecihry ""{app}\ModPack\OriginalFiles\path.file"" ""{app}\"""; Flags: runhidden
[Code]
var
OldModsListBox: TNewCheckListBox;
///////////////////////////////////////////////
function IsOldMods(const Msg: String): Boolean;
begin
with OldModsListBox do
Result := Checked[Items.IndexOf(CustomMessage(Msg))]
end;
//////////////////////////////
procedure CreateSelectDirPage;
var
rt: TRect;
begin
OldModsListBox := TNewCheckListBox.Create(WizardForm);
with OldModsListBox do
begin
Parent := WizardForm.SelectDirPage;
Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(10);
Width := Parent.ClientWidth;
BorderStyle := bsNone;
ParentColor := True;
ShowLines := False;
WantTabs := True;
AddCheckBox(CustomMessage('DeleteOldMods'), '', 0, True, True, True, False, nil);
AddCheckBox(CustomMessage('CreateBackupOldMods'), '', 1, True, True, False, True, nil);
rt := ItemRect(ItemCount-1);
Height := rt.Bottom;
end;
end;
////////////////////////////////////////////////////////////////////////////
procedure DeleteFiles(const Path: String; const DeleteSubdirsAlso: Boolean);
begin
DelTree(Path, False, True, DeleteSubdirsAlso);
end;
/////////////////////////////
procedure InitializeWizard();
begin
CreateSelectDirPage;
end;
В примере препроцессором создаются тестовые папки с файлами по пути D:\test. В ней находятся файл path.file для проверки сохранения в OriginalFiles, папка res_mods для проверки сохранения в BackUp. В res_mods 2 папки: xvm и 0.9.3 (плюс подпапка test), в каждой из папок по файлу с именем папки, в которой находится файл. Все готово к экспериментам.
В IDE ставим брейкпоинты (F5 или мышкой) на 2-х строках из секции Files и на строке из секции InstallDelete.
Запускаем скрипт на выполнение - F9.
После кнопки "Установить" сработает первый брейк на InstallDelete. Жмем на F9, чтобы исполнение пошло дальше до второго брейка, это будет первая сторока из секции Files. Между этими 2-мя брейками выполнилась строка из InstallDelete. Смотрим что там. Там идет удаление папок и файлов из res_mods\xvm. Смотрим, так ли это. Открываем папку res_mods\xvm и видим, что она пуста, лежащего в ней файла xvm.txt нет.
Жмем на F9, чтобы исполнение пошло дальше до третьего брейка, это будет вторая сторока из секции Files. Смотрим, что случилось за это время. В первой выполнившейся строке из Files написано скопировать из res_mods\0.9.3 все файлы и папки в папку ModPack\BackUp\res_mods\0.9.3, после этого удалить из res_mods\0.9.3 все файлы и папки. Смотрим, так ли это. Открываем папку ModPack\BackUp\res_mods\0.9.3 и видим, что в ней файл 0.9.3.txt и папка test с файлом test.txt. Открываем res_mods\0.9.3 и видим, что она пуста.
Жмем на F9, заканчиваем установку. Смотрим, что случилось за это время. Отработала вторая строка из Files, в которой написано файл path.file скопировать в ModPack\OriginalFiles, а после удалить. Смотрим, так ли это. Открываем папку ModPack\OriginalFiles, видим в ней файл path.file, в D:\test его нет.
Запускаем деинсталлятор unins000.exe. В секции UninstallRun строки, возвращающие файлы из ModPack\BackUp\res_mods\0.9.3 и ModPack\OriginalFiles в D:\test\res_mods\0.9.3 и D:\test соответственно. По окончании видим, что сохраненные файлы и папки вернулись назад.
Что я делаю не так, что у вас не выходит?
Dodakaedr
20-10-2014, 08:23
Подскажите, пожалуйста, как можно с помощью cmd перемещать, копировать, удалять папки с файлами и подпапками через секцию [Code]?
kotyarko@fb
20-10-2014, 17:42
Подскажите, пожалуйста, как можно с помощью cmd перемещать, копировать, удалять папки с файлами и подпапками через секцию [code]? »
Смотрите функцию ShellExec. И вызывайте её на том этапе установки, когда вам это нужно, через CurStepChanged, CurPageChanged, InitializeWizard, InitializeSetup и т.д.
Dodakaedr
20-10-2014, 19:01
kotyarko@fb, Ну да не точно сказал.... нет не файл cmd, а командная строка(cmd.exe)
ekspoint
20-10-2014, 20:36
всем привет,подскажите как сделать стр в компонентах
kotyarko@fb
20-10-2014, 21:14
всем привет,подскажите как сделать стр в компонентах »
А подробнее?
Ну да не точно сказал.... нет не файл cmd, а командная строка(cmd.exe) » Ок, а если через секцию Сode, то зачем cmd нужен?
Можно стандартными средствами Inno.
Dodakaedr
20-10-2014, 21:15
Можно стандартными средствами Inno. »
Например?
как сделать стр в компонентах »Что это такое: "стр"? "Страница"? Пишите полностью.
[Setup]
AppName=My program
AppVerName=1.5
DefaultDirName={pf}\My program
OutputDir=.
[Components]
Name: cmp1; Description: Компонент 1
Name: cmp2; Description: Компонент 2
Name: cmp3; Description: Компонент 3
Name: cmp4; Description: Компонент 4
Подскажите, пожалуйста, как можно с помощью cmd перемещать, копировать, удалять папки с файлами и подпапками через секцию [code]? »
Пример удаления папки "1" (с содержимым), расположенную в корне системного диска:
[Code]
procedure InitializeWizard();
var
ResultCode: Integer;
begin
Exec('cmd.exe', ExpandConstant('/C RD {sd}\1 /S /Q'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, ResultCode);
end;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC