-
Posts
143 -
Joined
-
Last visited
Posts posted by Nowik1971
-
-
Опубликовано 28 минут назад Nowik1971, on 29 Jan 2016 - 23:00, said: я прошу помощи так ка сам не разбираюсь как вы, а вы тупо посылаете.... вот и помог блин, спасибо! фао
Спасибо! я уже доделал, пока вопросов нет, но ФАQ пригодится
есть еще один вопрос к Kotyarko_O как он сделал проверку на модпак в ангаре вот я здесь увидел его скрин. http://www.koreanrandom.com/forum/topic/9050-инсталлятор-для-модпаков/?p=199696.. можно такой скрипт?
-
Изучай
Смеёшься? Я по Русски и то не всегда правильно говорю, а ты мне англицкую речь даешь читать ..... спасибо Dark_Knight_MiX помог терпения хватило, он не послал как множество здесь. Ему +++ огромный!!! Вот результат прилепил .Barmaleykin_MultiPackFull.rar
-
Nowik1971, on 29 Jan 2016 - 18:16, said: В этом примере по моему чистятся, удаляются и настройки игры, а мне такого не надо, надо чтобы настройки игры сохранялись. А ты тупо не копипасть то же самое, что и там. Это пример, как всё нужно делать. Нужные тебе папки прописывай сам. Nowik1971, on 29 Jan 2016 - 18:16, said: а во вторых как мне прицепить не в установку, а в удаление восстановление раннего бекапа и если его нет, то просто продолжить удаление пака.? По той же ссылке это есть.
я прошу помощи так ка сам не разбираюсь как вы, а вы тупо посылаете.... вот и помог блин, спасибо!
-
В этом примере по моему чистятся, удаляются и настройки игры, а мне такого не надо, надо чтобы настройки игры сохранялись. это во первых, а во вторых как мне прицепить не в установку, а в удаление восстановление раннего бекапа и если его нет, то просто продолжить удаление пака.?
-
WoT CacheCleaner.rarНу, Гуру подскажите как мне вставить этот код очистки кеша чтобы работал, а то пишет ошибку, я языка не знаю вот и прошу помощи.
'код скрипта'
#include "бекап_.iss"
//========================================================================================================\\function DeleteCheck: Boolean;begin If DeletMods.Checked thenbegin DelTree(ExpandConstant('{app}\res_mods'), True, True, True); CreateDir(ExpandConstant('{app}\res_mods\{#Patch}'));end;end;//"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""//function MoveCheck: Boolean;begin If BackupMods.Checked thenbegin MoveDir(ExpandConstant('{app}\res_mods\'),ExpandConstant('{app}\res_mods\backup')); CreateDir(ExpandConstant('{app}\res_mods\{#Patch}'));end;end;//"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""//procedure Deletkahh;begin If Deletkah.Checked thenbeginSet fso = CreateObject("Scripting.FileSystemObject") Set WshShell = CreateObject("WScript.Shell") Set strFolder = fso.GetFolder(WshShell.ExpandEnvironmentStrings("%APPDATA%")) TempGameFolder = (strFolder & "\" & "Wargaming.net" & "\" & "WorldOfTanks") Set objFSO=Createobject("Scripting.Filesystemobject") Set objFolder=objFSO.GetFolder(TempGameFolder) Set objFiles=objFolder.Files For Each objFile In objFiles If objFile.Name <> "preferences.xml" And objFile.Name <> "preferences_ct.xml" And objFile.Name <> "preferences_ctp.xml" Then objFSO.DeleteFile TempGameFolder & "\" & objFile.Name, True End if Next For Each objSubFolder In objFolder.SubFolders If objSubFolder.Name <> "xvm" Then objFSO.DeleteFolder TempGameFolder & "\" & objSubFolder.Name End if//---------------------------------------------------------------------------//procedure CustomBackupChanged(CurStep: TSetupStep);
begin
If CurStep=ssInstall then
begin
DeleteCheck;
MoveCheck;
end;
end;кто сможет подправьте... или скажите как мне подключить внешний скрипт вот этот.WoT CacheCleaner
-
подскажите в примере как этот скрипт подключить и еще вопрос... я не совсем все понимаю, вот например я выложил свежую версии. пака на яндекс диск как сделать чтобы в ангаре и при установке проверялось и выдавалось сообщение о том что есть обновление.. и гадо перейти по ссылке....А если в общем, то есть TNewProgressBar. asterix93, on 24 Jan 2016 - 15:57, said: harasho a kak delati stobi sabsenia bila na stranita Например,TMemo на форме вместо MsgboxЗаранее спасибо за помощь...
-
Выложил исходники своего инсталлятора, может кому-то пригодится. http://www.koreanran...к-с-инсталлято/
Отлично! Кое что мне надо почерпнуть у тебя, а именно это проверка обновлений.... как до этого дойду напишу в личку может поможешь если сам не разберусь
-
а так оно не пашет
Я учусь и за помощь все огромное спасибо! Да и не злись на меня плюсов и тебе наставлю мне не жалко, я просто подчеркнул своим минусом, что ты просто сарказм свой показываешь , а просто помочь не смог сначала, Короче всем спасибо!
И не посылайте меня часто ....
-
Nowik1971, on 21 Jan 2016 - 17:33, said: Имеется скрипт с этого сайта нужно максимально автоматизировать , чтобы дата и время вводилось автоматом при создании в секцию Справка в помощь. Изменено: Kotyarko_O, Сегодня, 18:
Спасибо мне уже помогли, и тебе на добром слове спасибо! И ничего не путается просто руками меньше вводить. Все просто отлично работает!
только вот жто скрипт надо так же чтобы на автомате сделать, и чтобы выдавал сообщение "С момента создания данной версии прошло больше 2-х недель."
не на следующий день, а действительно через пару недель.
#define DownloadUrl "http://l****/"; #define ExpiryDate "20160121"; //Дата в формате год-месяц-день [Code] function InitializeSetupDateTime: Boolean; var ResultCode: Integer; begin Result:=CompareStr(GetDateTimeString('yyyymmdd', #0,#0), '{#ExpiryDate}') <= 0; If not Result then begin If MsgBox('Внимание!' #13#13 'С момента создания данной версии прошло больше 2-х недель.' #10#10 'Желаете проверить наличие обновлений?', mbError, MB_YESNO)=IDYES then begin ShellExec('', '{#DownloadUrl}', '' , '', SW_SHOW, ewNoWait, ResultCode); Exit; end else Result:=True; end; end;
-
Имеется скрипт с этого сайта нужно максимально автоматизировать , чтобы дата и время вводилось автоматом при создании в секцию
#define ExpiryDate "20160121"; //Дата в формате год-месяц-день
, ,.... да и еще помогите усовершенствовать скрипт, а то он не так работает, короче если сегодняшняя дата то сообщение не выдает, а если вчерашнее число даты поставить уже выдает сообщение предупреждениянадо чтобы примерно 1-2 недели не выдавал сообщение предупреждения.
'Скрипт '
#define DownloadUrl "http://l******/"; #define ExpiryDate "20160121"; //Дата в формате год-месяц-день [Code] function InitializeSetupDateTime: Boolean; var ResultCode: Integer; begin Result:=CompareStr(GetDateTimeString('yyyymmdd', #0,#0), '{#ExpiryDate}') <= 0; If not Result then begin If MsgBox('Внимание!' #13#13 'С момента создания данной версии прошло больше 2-х недель.' #10#10 'Желаете проверить наличие обновлений?', mbError, MB_YESNO)=IDYES then begin ShellExec('', '{#DownloadUrl}', '' , '', SW_SHOW, ewNoWait, ResultCode); Exit; end else Result:=True; end; end;
-
Спасибо! первая часть кода работает, а вторая нет, ... скрипт копилируется, но во время установки он неубивает процесс игры танков, а танки его убивают вахаха, сам пишу сам ржу как это так и пишет: в строке отладки [17:28:06,752] *** Установка started
[17:28:07,179] Setup version: Inno Setup version 5.5.1.ee2 (u) [17:28:07,180] Original Setup EXE: C:\Users\Andrey_nowik\Desktop\Сборки мои читов\****iPackFull.exe [17:28:07,182] Setup command line: /SL5="$5B033A,9585001,158720,C:\Users\------wik\Desktop\Сборки мои читов\------MultiPackFull.exe" /DEBUGWND=$100246 [17:28:07,183] Windows version: 6.2.9200 (NT platform: Yes) [17:28:07,183] 64-bit Windows: Yes [17:28:07,184] Processor architecture: x64 [17:28:07,184] User privileges: Administrative [17:28:07,208] 64-bit install mode: No [17:28:07,597] Created temporary directory: C:\Users\ANDREY~1\AppData\Local\Temp\is-1BTP7.tmp [17:28:07,616] InitializeSetup returned False; aborting. [17:28:07,617] Got EAbort exception. [17:28:07,617] Deinitializing Setup. [17:28:07,710] *** Установка exit code: 1
Что не так делаю?
Запомните: картинки, свистелки и перделки в инсталляторе далеко не главное. Главное - его функционал, что он может сделать в процессе установки. В плане дизайна нужно придерживаться минимализма и не перегружать интерфейс ненужными вещами. Для себя давным давно выбрал именно это, дизайн - всё просто, доступно и со вкусом, функционал - начиная от бэкапа, заканчивая редактированием на лету по средствам инсталлятора конфигов XVM и модов, автоматическим сохранением/восстановлением токена доступа к статистике XVM и т.д.[quote name='AtotIK' timestamp='1396941126' post='167390']
[*************Code] function CreateLog(): Boolean; var I: Integer; FileName, DateTime: String; begin Result:=True; DateTime:=GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', '-'); FileName:=ExpandConstant('{app}\Install Log (' + DateTime + ').log'); SaveStringToFile(FileName, '"Modpack от AtotIK для v0.9.0 - Update 68" - Install Log - ' + DateTime + #13#10 + #13#10 + 'Выбранные компоненты:' + #13#10, True); For I:=0 to WizardForm.ComponentsList.Items.Count - 1 do If WizardForm.ComponentsList.Checked[I] then begin SaveStringToFile(FileName, '... ' + WizardForm.ComponentsList.ItemCaption[I] + #13#10, True); end; end; procedure CurStepChanged(CurStep: TSetupStep); begin If CurStep=ssInstall then begin CreateLog(); end; end;
Нажимаю нет и установка не продолжается пробовал менять труе на фальсе все равно
-
Как совместить эти два скрипта
//--------------------------------------- function KillTask(ExeFileName: string): Integer; external 'KillTask@files:ISTask.dll stdcall delayload'; function RunTask(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@files:ISTask.dll stdcall delayload'; //**************************************************// function InitializeSetup(): Boolean; begin If RunTask('WorldOfTanks.exe', false) then begin if MsgBox('Игра WorldOfTanks запущена. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then begin KillTask('WorldOfTanks.exe'); Result:= True; end else Exit; end; Result:=True; end; //----------------------------------- function InitializeSetup(): Boolean; var ResultCode: Integer; begin Result:=CompareStr(GetDateTimeString('yyyymmdd', #0,#0), '{#ExpiryDate}') <= 0; If not Result then begin If MsgBox('Внимание!' #13#13 'С момента создания данной версии прошло больше 2-х недель.' #10#10 'Желаете проверить наличие обновлений?', mbError, MB_YESNO)=IDYES then begin ShellExec('', '{#DownloadUrl}', '' , '', SW_SHOW, ewNoWait, ResultCode); Exit; end else Result:=True; end; end;
-
Я не знаю как прикрутить архиватор, а во вторых вот такая проблемка: как это реализовать подскажите ткните носом, должен быть архив в папке с датой и временем
-
Спасибо все теперь работает! копирует и бекапит, но мне все же интересно а как сделать чтобы бекап упаковывался и архив был с датой и временем создания в названии архивабекапа
-
Что здесь творится?
Не могу реализовать бекапирование пробую и в юникоде версии и в анси все равно пустые папки, если только файл кидаю в 0,9,13 то он бекапируется, а все что во вложенных папках в 0,9,13 и хвм не копируется помогите плиз.
Ты установщики распаковываешь или что? Для использования на юникоде тут скидывали файл
я только на 8 странице и причем здесь распаковка.... ты обещал в личке и так и не дал ответ, а я твердолобый должен так же понять все
-
Вроде доделал. Объясняю как работает:
Через #include подключается файл, в котором описаны функции работы с файлами и папками. В частности тут это - MoveDir. Нужна версия Inno Setup с установленным препроцессором.
Страница создаётся после начальной. Выбираете действие и спокойно идете дальше по установке. Как только инсталлятор переходит на процесс установки (страница ssInstall) запускается чекер, который смотрит какой пункт был выбран и исходя из этого запускает нужную функцию на исполнение. В первом варианте удаляются папки 0.8.11 и xvm, потом создаётся пустая папка 0.8.11. Во втором варианте папки 0.8.11 и xvm переносятся в res_mods\backup. После создаётся пустая папка 0.8.11. Третий вариант создаётся как "заглушка", ничего не происходит при его выборе.
Если не нужны надписи вверху страницы (там где картинка), то оставляйте пустые кавычки в строке:
BackupPage:=CreateCustomPage(wpWelcome, '', '');
Тогда нужно будет ещё скрыть белый фон, на котором эти надписи отображаются. В InitializeWizard() добавьте:WizardForm.PageNameLabel.Hide; WizardForm.PageDescriptionLabel.Hide;
Поле этого страница будет выглядить примерно вот так:В общем спрашивайте, если что-то не понятно. Вроде всё доступно написал.
Все папки создаются пустые и в 0.9.13. один файл создается ignoremodpackconfig.info в нем написано:Бро!
Ну как так-то?
Мы же просто хотим знать, какие моды пользуются наибольшей популярностью, чтобы развивать и улучшать их =(
Пробовал и ansi версию и Unicode все одно и тоже..
В чем проблемка? Гуру помогите...
вот код:
; BackUpPage - отдельная страница для реализации резервного копирования файлов с выбором параметров ; Автор: AtotIK #include "SHFileOperation.iss"; [Code] var BackupPage: TWizardPage; DeleteRadioButton, MoveRadioButton, NoneRadioButton: TNewRadioButton; const BackupDescText = 'Во избежание проблем совместимости и конфликтов между модификациями рекомендуется удалить уже установленные на данный момент в игровом клиенте.' #13#13 'Выберите необходимый пункт из представленных. При этом будет очищено содержимое папки "res_mods\0.9.13", удалена папка "res_mods\xvm" или созданы резервные копии Ваших файлов.'; DeleteDescText = 'Установщик удалит все файлы в папках.'; MoveDescText = 'Установщик сделает резервную копию всех файлов в папках.'; NoneDescText = 'Установщик оставит всё как есть.'; function BackupCheck_1(): Boolean; var BackupDescLabel, DeleteDescLabel, MoveDescLabel, NoneDescLabel: TLabel; begin BackupPage:=CreateCustomPage(wpSelectDir, 'Создание резервных копий файлов перед установкой', 'Пожалуйста, прочтите следующую важную информацию перед тем, как продолжить.'); BackupDescLabel:=TLabel.Create(WizardForm); BackupDescLabel.Parent:=BackupPage.Surface; BackupDescLabel.Left:=0; BackupDescLabel.Top:=0; BackupDescLabel.Width:=BackupPage.SurfaceWidth; BackupDescLabel.Height:=90; BackupDescLabel.AutoSize:=False; BackupDescLabel.Wordwrap:=True; BackupDescLabel.Caption:=BackupDescText; DeleteRadioButton:=TNewRadioButton.Create(WizardForm); DeleteRadioButton.Parent:=BackupPage.Surface; DeleteRadioButton.Checked:=False; DeleteRadioButton.Top:=95; DeleteRadioButton.Width:=BackupPage.SurfaceWidth; DeleteRadioButton.Font.Style:=[fsBold]; DeleteRadioButton.Font.Size:=9; DeleteRadioButton.Caption:='Удалить файлы' DeleteDescLabel:=TLabel.Create(WizardForm); DeleteDescLabel.Parent:=BackupPage.Surface; DeleteDescLabel.Left:=18; DeleteDescLabel.Top:=DeleteRadioButton.Top + DeleteRadioButton.Height + 4; DeleteDescLabel.Width:=BackupPage.SurfaceWidth; DeleteDescLabel.Height:=40; DeleteDescLabel.AutoSize:=False; DeleteDescLabel.Wordwrap:=True; DeleteDescLabel.Caption:=DeleteDescText; MoveRadioButton:=TNewRadioButton.Create(WizardForm); MoveRadioButton.Parent:=BackupPage.Surface; MoveRadioButton.Checked:=True; MoveRadioButton.Top:=140; MoveRadioButton.Width:=BackupPage.SurfaceWidth; MoveRadioButton.Font.Style:=[fsBold]; MoveRadioButton.Font.Size:=9; MoveRadioButton.Caption:='Сделать резервную копию файлов' MoveDescLabel:=TLabel.Create(WizardForm); MoveDescLabel.Parent:=BackupPage.Surface; MoveDescLabel.Left:=18; MoveDescLabel.Top:=MoveRadioButton.Top + MoveRadioButton.Height + 4; MoveDescLabel.Width:=BackupPage.SurfaceWidth; MoveDescLabel.Height:=40; MoveDescLabel.AutoSize:=False; MoveDescLabel.Wordwrap:=True; MoveDescLabel.Caption:=MoveDescText; NoneRadioButton:=TNewRadioButton.Create(WizardForm); NoneRadioButton.Parent:=BackupPage.Surface; NoneRadioButton.Checked:=False; NoneRadioButton.Top:=185; NoneRadioButton.Width:=BackupPage.SurfaceWidth; NoneRadioButton.Font.Style:=[fsBold]; NoneRadioButton.Font.Size:=9; NoneRadioButton.Caption:='Ничего не трогать' NoneDescLabel:=TLabel.Create(WizardForm); NoneDescLabel.Parent:=BackupPage.Surface; NoneDescLabel.Left:=18; NoneDescLabel.Top:=NoneRadioButton.Top + NoneRadioButton.Height + 4; NoneDescLabel.Width:=BackupPage.SurfaceWidth; NoneDescLabel.Height:=40; NoneDescLabel.AutoSize:=False; NoneDescLabel.Wordwrap:=True; NoneDescLabel.Caption:=NoneDescText; end; function BackupCheck_2(): Boolean; begin If DeleteRadioButton.Checked then begin DelTree(ExpandConstant('{app}\res_mods\0.9.13'), True, True, True); DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True); CreateDir(ExpandConstant('{app}\res_mods\0.9.13')); end; end; function BackupCheck_3(): Boolean; begin If MoveRadioButton.Checked then begin MoveDir(ExpandConstant('{app}\res_mods\0.9.13\'),ExpandConstant('{app}\res_mods\backup\0.9.13')); MoveDir(ExpandConstant('{app}\res_mods\xvm\'),ExpandConstant('{app}\res_mods\backup\xvm')); CreateDir(ExpandConstant('{app}\res_mods\0.9.13')); DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True); end; end; procedure CurStepChanged(CurStep: TSetupStep); begin If CurStep=ssInstall then begin BackupCheck_2(); BackupCheck_3(); end; end; procedure InitializeWizard(); begin BackupCheck_1(); end;
;***************************************************************; ;****************** SHFileOperation.iss ************************; ;***************************************************************; ;* Include this file in project. Example: ;* #include "SHFileOperation.iss" ;***************************************************************; ;************************ 1 ************************************; ;* function CopyDir(const fromDir, toDir: string): Boolean; ;* Example 1 (without <fromDir> trailing backslash): ;* CopyDir('C:\TMP\MyApp', 'C:\TMP\Backup'); ;* Result: C:\TMP\Backup\MyApp\..all <MyApp> subdirs and files ;* Example 2 (with <fromDir> trailing backslash): ;* CopyDir('C:\TMP\MyApp\', 'C:\TMP\Backup'); ;* Result: C:\TMP\Backup\..all <MyApp> subdirs and files ;***************************************************************; ;************************ 2 ************************************; ;* function MoveDir(const fromDir, toDir: string): Boolean; ;* Example 1 (without <fromDir> trailing backslash): ;* MoveDir('C:\TMP\MyApp', 'C:\TMP\Backup'); ;* Result: C:\TMP\Backup\MyApp\..all <MyApp> subdirs and files ;* Example 2 (with <fromDir> trailing backslash): ;* MoveDir('C:\TMP\MyApp\', 'C:\TMP\Backup'); ;* Result: C:\TMP\Backup\..all <MyApp> subdirs and files ;***************************************************************; ;************************ 3 ************************************; ;* function DelDir(dir: string; toRecycle: Boolean): Boolean; ;* If <toRecycle> is True, <dir> deleted in Recycle Bin. ;***************************************************************; ;************************ 4 ************************************; ;* function RenameDir(const fromDir, toDir: string): Boolean; ;***************************************************************; ;***************************************************************; ;***************************************************************; [Code] #ifdef UNICODE type PChar = PAnsiChar; #endif type TSHFileOpStruct = record Wnd: HWND; wFunc: UINT; pFrom: PAnsiChar; pTo: PAnsiChar; fFlags: Word; // FILEOP_FLAGS; fAnyOperationsAborted: BOOL; hNameMappings: HWND; // Pointer; lpszProgressTitle: PAnsiChar; { only used if FOF_SIMPLEPROGRESS } end; const // use in wFunc { $EXTERNALSYM FO_MOVE } FO_MOVE = $0001; { $EXTERNALSYM FO_COPY } FO_COPY = $0002; { $EXTERNALSYM FO_DELETE } FO_DELETE = $0003; { $EXTERNALSYM FO_RENAME } FO_RENAME = $0004; // use in fFlags { $EXTERNALSYM FOF_MULTIDESTFILES } FOF_MULTIDESTFILES = $0001; { $EXTERNALSYM FOF_CONFIRMMOUSE } FOF_CONFIRMMOUSE = $0002; { $EXTERNALSYM FOF_SILENT } FOF_SILENT = $0004; { don't create progress/report } { $EXTERNALSYM FOF_RENAMEONCOLLISION } FOF_RENAMEONCOLLISION = $0008; { $EXTERNALSYM FOF_NOCONFIRMATION } FOF_NOCONFIRMATION = $0010; { Don't prompt the user. } { $EXTERNALSYM FOF_WANTMAPPINGHANDLE } FOF_WANTMAPPINGHANDLE = $0020; { Fill in SHFILEOPSTRUCT.hNameMappings Must be freed using SHFreeNameMappings } { $EXTERNALSYM FOF_ALLOWUNDO } FOF_ALLOWUNDO = $0040; { $EXTERNALSYM FOF_FILESONLY } FOF_FILESONLY = $0080; { on *.*, do only files } { $EXTERNALSYM FOF_SIMPLEPROGRESS } FOF_SIMPLEPROGRESS = $0100; { means don't show names of files } { $EXTERNALSYM FOF_NOCONFIRMMKDIR } FOF_NOCONFIRMMKDIR = $0200; { don't confirm making any needed dirs } { $EXTERNALSYM FOF_NOERRORUI } FOF_NOERRORUI = $0400; { don't put up error UI } function SHFileOperation(const lpFileOp: TSHFileOpStruct):Integer; external '[email protected] stdcall'; {****************************************************************} {****************************************************************} {****************************************************************} function BackupDir(const fromDir, toDir: string; IsMove: Boolean): Boolean; var fos: TSHFileOpStruct; _fromDir, _toDir: string; SR: TFindRec; res: Boolean; begin ForceDirectories(toDir); if IsMove then fos.wFunc := FO_MOVE else fos.wFunc := FO_COPY; fos.fFlags := FOF_FILESONLY or FOF_SILENT or FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR; _fromDir:= AddBackslash(fromDir); _toDir := AddBackslash(toDir); if (Length(fromDir) = Length(_fromDir)) then begin res:= FindFirst(_fromDir + '*', SR); try while res do begin if (SR.Name <> '') and (SR.Name <> '.') and (SR.Name <> '..') then begin if SR.Attributes = FILE_ATTRIBUTE_DIRECTORY then begin _fromDir:= _fromDir + SR.Name + #0#0; _toDir := _toDir + #0#0; fos.pFrom := PAnsiChar(_fromDir); fos.pTo := PAnsiChar(_toDir); end else begin _fromDir:= _fromDir + SR.Name + #0#0; _toDir := _toDir + SR.Name + #0#0; fos.pFrom := PAnsiChar(_fromDir); fos.pTo := PAnsiChar(_toDir); end; Result := (0 = ShFileOperation(fos)); _fromDir:= ExtractFilePath(_fromDir); _toDir:= ExtractFilePath(_toDir); end; res := FindNext(SR); end; finally FindClose(SR); end; end else begin _fromDir:= RemoveBackslashUnlessRoot(_fromDir) + #0#0; _toDir := RemoveBackslashUnlessRoot(_toDir) + #0#0; fos.pFrom := PAnsiChar(_fromDir); fos.pTo := PAnsiChar(_toDir); Result := (0 = ShFileOperation(fos)); end; end; {****************************************************************} function MoveDir(const fromDir, toDir: string): Boolean; begin Result := BackupDir(fromDir, toDir, True); end; {****************************************************************} function CopyDir(const fromDir, toDir: string): Boolean; begin Result := BackupDir(fromDir, toDir, False); end; {****************************************************************} function DelDir(dir: string; toRecycle: Boolean): Boolean; var fos: TSHFileOpStruct; _dir: string; begin _dir:= RemoveBackslashUnlessRoot(dir) + #0#0; fos.wFunc := FO_DELETE; fos.fFlags := FOF_SILENT or FOF_NOCONFIRMATION; if toRecycle then fos.fFlags := fos.fFlags or FOF_ALLOWUNDO; fos.pFrom := PAnsiChar(_dir); Result := (0 = ShFileOperation(fos)); end; {****************************************************************} function RenameDir(const fromDir, toDir: string): Boolean; var fos: TSHFileOpStruct; _fromDir, _toDir: string; begin _fromDir:= RemoveBackslashUnlessRoot(fromDir) + #0#0; _toDir := RemoveBackslashUnlessRoot(toDir) + #0#0; fos.wFunc := FO_RENAME; fos.fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or FOF_SILENT or FOF_NOCONFIRMATION; fos.pFrom := PAnsiChar(_fromDir); fos.pTo := PAnsiChar(_toDir); Result := (0 = ShFileOperation(fos)); end; {****************************************************************} {****************************************************************} {****************************************************************} function FilesMaskOperation(const fromDir, toDir, fileMask: string; FileOp: Integer; EmptyDirRemove: Boolean; toRecycle: Boolean): Boolean; var fos: TSHFileOpStruct; _fromDir, _toDir: string; FSR, DSR: TFindRec; FindResult: Boolean; APath: string; begin APath := AddBackslash(fromDir); FindResult := FindFirst(APath + fileMask, FSR); try while FindResult do begin if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin Case FileOp of FO_COPY: begin fos.wFunc := FO_COPY; end; FO_MOVE: begin fos.wFunc := FO_MOVE; end; FO_DELETE: begin fos.wFunc := FO_DELETE; if toRecycle then fos.fFlags := fos.fFlags or FOF_ALLOWUNDO; end; FO_RENAME: begin fos.wFunc := FO_RENAME; end; else ; end; fos.fFlags := fos.fFlags or FOF_FILESONLY or FOF_SILENT or FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR; _fromDir:= APath + FSR.Name + #0#0; _toDir:= AddBackslash(toDir) + FSR.Name + #0#0; ForceDirectories(ExtractFilePath(_toDir)); fos.pFrom := PChar(_fromDir); fos.pTo := PChar(_toDir); Result := (0 = ShFileOperation(fos)); end; FindResult := FindNext(FSR); end; FindResult := FindFirst(APath + '*.*', DSR); while FindResult do begin if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then {Recursion} FilesMaskOperation(APath + DSR.Name, AddBackslash(toDir) + DSR.Name, fileMask, FileOp, EmptyDirRemove, toRecycle); FindResult := FindNext(DSR); end; finally FindClose(FSR); FindClose(DSR); if EmptyDirRemove then RemoveDir(APath); end; end; function CopyFiles(const fromDir, toDir, fileMask: string): Boolean; begin Result := FilesMaskOperation(fromDir, toDir, fileMask, FO_COPY, False, False); end; function MoveFiles(const fromDir, toDir, fileMask: string): Boolean; begin Result := FilesMaskOperation(fromDir, toDir, fileMask, FO_MOVE, True, False); end; function DelFiles(const fromDir, fileMask: string; toRecycle: Boolean ): Boolean; begin Result := FilesMaskOperation(fromDir, '', fileMask, FO_DELETE, True, toRecycle); end;
-
Иннот, замени wpWelcome на wpSelectDir.
Вот так сделал все равно пустые папки и ничего не копируется
; BackUpPage - отдельная страница для реализации резервного копирования файлов с выбором параметров; Автор: AtotIK
#include "SHFileOperation.iss";
varBackupPage: TWizardPage;DeleteRadioButton, MoveRadioButton, NoneRadioButton: TNewRadioButton;constBackupDescText ='Во избежание проблем совместимости и конфликтов между модификациями рекомендуется удалить уже установленные на данный момент в игровом клиенте.' #13#13 'Выберите необходимый пункт из представленных. При этом будет очищено содержимое папки "res_mods\0.9.13", удалена папка "res_mods\xvm" или созданы резервные копии Ваших файлов.';DeleteDescText ='Установщик удалит все файлы в папках.';MoveDescText ='Установщик сделает резервную копию всех файлов в папках.';NoneDescText ='Установщик оставит всё как есть.';function BackupCheck_1(): Boolean;varBackupDescLabel, DeleteDescLabel, MoveDescLabel, NoneDescLabel: TLabel;beginBackupPage:=CreateCustomPage(wpSelectDir, 'Создание резервных копий файлов перед установкой', 'Пожалуйста, прочтите следующую важную информацию перед тем, как продолжить.');BackupDescLabel:=TLabel.Create(WizardForm);BackupDescLabel.Parent:=BackupPage.Surface;BackupDescLabel.Left:=0;BackupDescLabel.Top:=0;BackupDescLabel.Width:=BackupPage.SurfaceWidth;BackupDescLabel.Height:=90;BackupDescLabel.AutoSize:=False;BackupDescLabel.Wordwrap:=True;BackupDescLabel.Caption:=BackupDescText;DeleteRadioButton:=TNewRadioButton.Create(WizardForm);DeleteRadioButton.Parent:=BackupPage.Surface;DeleteRadioButton.Checked:=False;DeleteRadioButton.Top:=95;DeleteRadioButton.Width:=BackupPage.SurfaceWidth;DeleteRadioButton.Font.Style:=[fsBold];DeleteRadioButton.Font.Size:=9;DeleteRadioButton.Caption:='Удалить файлы'DeleteDescLabel:=TLabel.Create(WizardForm);DeleteDescLabel.Parent:=BackupPage.Surface;DeleteDescLabel.Left:=18;DeleteDescLabel.Top:=DeleteRadioButton.Top + DeleteRadioButton.Height + 4;DeleteDescLabel.Width:=BackupPage.SurfaceWidth;DeleteDescLabel.Height:=40;DeleteDescLabel.AutoSize:=False;DeleteDescLabel.Wordwrap:=True;DeleteDescLabel.Caption:=DeleteDescText;MoveRadioButton:=TNewRadioButton.Create(WizardForm);MoveRadioButton.Parent:=BackupPage.Surface;MoveRadioButton.Checked:=True;MoveRadioButton.Top:=140;MoveRadioButton.Width:=BackupPage.SurfaceWidth;MoveRadioButton.Font.Style:=[fsBold];MoveRadioButton.Font.Size:=9;MoveRadioButton.Caption:='Сделать резервную копию файлов'MoveDescLabel:=TLabel.Create(WizardForm);MoveDescLabel.Parent:=BackupPage.Surface;MoveDescLabel.Left:=18;MoveDescLabel.Top:=MoveRadioButton.Top + MoveRadioButton.Height + 4;MoveDescLabel.Width:=BackupPage.SurfaceWidth;MoveDescLabel.Height:=40;MoveDescLabel.AutoSize:=False;MoveDescLabel.Wordwrap:=True;MoveDescLabel.Caption:=MoveDescText;NoneRadioButton:=TNewRadioButton.Create(WizardForm);NoneRadioButton.Parent:=BackupPage.Surface;NoneRadioButton.Checked:=False;NoneRadioButton.Top:=185;NoneRadioButton.Width:=BackupPage.SurfaceWidth;NoneRadioButton.Font.Style:=[fsBold];NoneRadioButton.Font.Size:=9;NoneRadioButton.Caption:='Ничего не трогать'NoneDescLabel:=TLabel.Create(WizardForm);NoneDescLabel.Parent:=BackupPage.Surface;NoneDescLabel.Left:=18;NoneDescLabel.Top:=NoneRadioButton.Top + NoneRadioButton.Height + 4;NoneDescLabel.Width:=BackupPage.SurfaceWidth;NoneDescLabel.Height:=40;NoneDescLabel.AutoSize:=False;NoneDescLabel.Wordwrap:=True;NoneDescLabel.Caption:=NoneDescText;end;function BackupCheck_2(): Boolean;beginIf DeleteRadioButton.Checked thenbeginDelTree(ExpandConstant('{app}\res_mods\0.9.13'), True, True, True);DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True);CreateDir(ExpandConstant('{app}\res_mods\0.9.13'));end;end;function BackupCheck_3(): Boolean;beginIf MoveRadioButton.Checked thenbeginMoveDir(ExpandConstant('{app}\res_mods\0.9.13\'),ExpandConstant('{app}\res_mods\backup\0.9.13'));
MoveDir(ExpandConstant('{app}\res_mods\xvm\'),ExpandConstant('{app}\res_mods\backup\xvm'));
CreateDir(ExpandConstant('{app}\res_mods\0.9.13'));
DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True);
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssInstall then
begin
BackupCheck_2();
BackupCheck_3();
end;
end;
procedure InitializeWizard();
begin
BackupCheck_1();
end;
-zav-, самый простой вариант сделать backup можно вот так:
[Files] Source: "{app}\res\scripts\*.*"; DestDir: "{app}\Backup\res\scripts"; Flags: external skipifsourcedoesntexist createallsubdirs recursesubdirs uninsneveruninstall; BeforeInstall: HideInstallPath; Source: "Work\Scripts\*.*"; DestDir: "{app}"; Flags: overwritereadonly ignoreversion recursesubdirs createallsubdirs; BeforeInstall: ShowInstallPath; [UninstallRun] Filename: "xcopy.exe"; Parameters: """{app}\Backup\res\scripts\*.*"" ""{app}\res\scripts\"" /S /E /C /H /R /Y /F"; Flags: runhidden; [UninstallDelete] Type: filesandordirs; Name: "{app}\Backup"; [_____________________Code] procedure HideInstallPath(); begin WizardForm.StatusLabel.Caption:='Создание резервных копий файлов...'; WizardForm.FileNameLabel.Visible:=False; end; procedure ShowInstallPath(); begin WizardForm.FileNameLabel.Visible:=True; WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles); end;
Но проверкой тут и не пахнет. Можно сделать через мой пример backup'а, но там проблемы с классами в Unicode-версии Inno Setup - не все файлы копирует из папки-исходника.Если готов использовать ANSI-версию, то сделаю на основе своего примера.
#include "SHFileOperation.iss"; #define CUR_DIR "res\scripts" ; #define BAK_DIR "Backup\res\scripts" ; [___________________________________________Code] procedure CurStepChanged(CurStep: TSetupStep); var ThereIsFolders: Boolean; begin ThereIsFolders := (DirExists(AddBackslash(WizardDirValue()) + '{#CUR_DIR}') and (not DirExists(AddBackslash(WizardDirValue()) + '{#BAK_DIR}')) ); if ThereIsFolders then if CurStep=ssInstall then CopyDir(ExpandConstant('{app}\res\scripts\'),ExpandConstant('{app}\Backup\res\scripts')); end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep = usPostUninstall then begin MoveDir(ExpandConstant('{app}\Backup\res\scripts\'),ExpandConstant('{app}\res\scripts')); DelTree(ExpandConstant('{app}\Backup'), True, True, True); end; end;
"SHFileOperation.iss" возьмёшь из моего примера на предыдущих станицах. Так будет проверять на наличие папки.А подскажите мне просто надо папку res_mods бекапить и все что в ней как это сделать и ваш скрипт так и не нашел помогите ткните носом
Создание инсталляторов для модпаков на базе Inno Setup
in Modding General Discussion
Posted · Edited by Nowik1971
А если у меня компоненты вот такие:
'компоненты'
то мне надо как написать?
к примеру к 10 компоненту
или это не правильно? я пробовал не работает... помогите разобраться что не так делаю. надо понять...