PDA

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


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

Rekit_403
17-10-2014, 00:08
Доброй ночи ребята.
Как реализовать подкачку модов из сети в установщике?
Т.е. моды, которые много весят будут докачивать с различных файлообменников.
Есть ли какой-то пример, как реализовать данное чудо?
Заранее благодарю всех кто поможет.

Nordek
17-10-2014, 01:14
Есть ли какой-то пример, как реализовать данное чудо? »
Загрузка файла из Интернет (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)

Tco 03
17-10-2014, 08:18
с твоим вариантом получилось со стандартным прогрессбаром а надо прогрессбары 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. »
Например?

Nordek
20-10-2014, 21:16
как сделать стр в компонентах »Что это такое: "стр"? "Страница"? Пишите полностью.


[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

Nordek
20-10-2014, 22:16
Подскажите, пожалуйста, как можно с помощью 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