Jump to content
Korean Random

Nowik1971

User
  • Posts

    143
  • Joined

  • Last visited

Posts posted by Nowik1971

  1. Опубликовано Сегодня, 19:08 Dark_Knight_MiX, on 29 Jan 2016 - 16:52, said:   руками )) ща MAHINATOR
     #define MyAppName "Моя программа" #define MyAppVersion "1.5" #define MyAppPublisher "Моя компания, Inc." #define MyAppURL "http://www.сайт.com/"#define MyAppExeName "MyProg.exe" [Setup] AppId={{ACF6B5AB-9DF3-43EB-B40C-633F075EC471} AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={pf}\{#MyAppName} DefaultGroupName={#MyAppName} OutputBaseFilename=setup Compression=lzma SolidCompression=yes [Components] Name: comp1; Description: "Установить ..."; Name: comp2; Description: "Удалить ..."; [code] procedure ComponentsListOnClickCheck(Sender: TObject); begin if (WizardForm.ComponentsList.ItemIndex = 0) and IsComponentSelected('comp1') then if MsgBox('вы действительно хотите поставить этот мод, мы его не рекомендуем ставить потому что ....', mbConfirmation, MB_YESNO) = IDNO then WizardForm.ComponentsList.Checked[0]:= false; end; procedure InitializeWizard; begin WizardForm.ComponentsList.OnClickCheck:=@ComponentsListOnClickCheck; end;

     А если у меня компоненты вот такие:

    'компоненты'

    [CustomMessages]
    BMP = Читы
    
    Mods1 = Автоприцелы с автозахватом и упреждением:
    Mods2 = AutoAim_by_SAE 18.8.1
    Mods3 = AutoAim_by_SAE 18.9.3
    Mods4 = AutoAim_by_SAE 18.9.5
    
    Mods5 = Комплексный PFMods v3.x.x
    Mods6 = Шары для арты(ModificationProjectile).
    Mods7 = Батл ассистент для арты(Battle_Assistant).
    Mods8 = Красные столбы.
    Mods9 = Интуиция для арты. Визуальное упреждение для арты (Arty Intuition).
    Mods10 = Улучшенная система прицеливания для WOT (AdvancedAimingSystem).
    Mods11 = Улучшенная система прицеливания для WOT (AdvancedAimingSystem от GPCracker).
    Mods12 = Circle-Позволяет отобразить вокруг своего танка кольцо радиусом 15 метров.
    Mods13 = Chams-Мод перекрашивает танки противника в яркие цвета делая их легко заметными.
    Mods14 = Автоогнетушитель за серебро.
    Mods15 = Перезарядка от ZorroJan.
    Mods16 = Контур врагов за препятствиями (рентген) настраиваемый + целеуказатели от ZorroJan.
    Mods17 = Удаление простреливаемых объектов от if_then_else.
    Mods18 = Tundra Mod  от Makct
    Mods19 = Альтернативные (дополнение к тундре).
    Mods20 = Мод лазерная указка.
    Mods21 = Мод разрушенные объекты
    
    
    Mods22 = Моды
    Mods23 = Pmod с пряниками от протанки.
    Mods24 = Предохранитель выстрела по союзнику и трупу.
    Mods25 = Оповешение союзников о засвете.
    Mods26 = Маркер направления атаки врага красный.
    Mods27 = Белые сбитые гусеницы.
    Mods28 = Радиальное меню в игре.
    
    Mods29 = Украшалки
    Mods30 = Часы в ангаре.
    Mods31 = Калькулятор в ангаре.
    
    Mods32 = Задать высокий приоритет игры в Windows(VIP)
    
    
    Mods33 = У меня слабый ПК и я хочу поднять FPS
    Mods34 = Отключение тумана на всех картах
    Mods35 = Отключение лишних визуальных эффектов
    Mods36 = Отключение движения облаков
    Mods37 = Отключение движения деревьев
    Mods38 = Отключение дыма извыхлопных труб
    Mods39 = Отключение дыма из уничтоженных танков
    Mods40 = Отключение дыма и плямяни при выстреле
    Mods41 = Отключение эффекта уничтожения танка
    Mods42 = Отключение эффекта взрыва снаряда
    Mods43 = Отключение эффекта разрушения и пожара на картах
    Mods44 = Отключение эффекта попадания в танк
    Mods45 = Отключение эффекта попадания в объекты
    
    Mods46 = Улучшение графики в игре и поднятие фпс до 50%:
    Mods47 = С конфигом от Pb13
    Mods48 = SweetFX_2.0X32bit (Улучшение графики для 32 битнойверсии windows).
    Mods49 = SweetFX_2.0X64bit (Улучшение графики для 64 битнойверсии windows).
    
    Mods50 = С конфигом от Ceр)I(.
    Mods51 = SweetFX_2.0X32bit (Улучшение графики для 32 битнойверсии windows).
    Mods52 = SweetFX_2.0X64bit (Улучшение графики для 64 битнойверсии windows).
    
    Mods53 = Проверка обновления модпака
    
    
    
    [Types]
    Name: full; Description: Выбрать все компоненты;
    Name: compact; Description: Как у Бармалейкина; 
    Name: custom; Description: Пользовательский режим; Flags: iscustom; 
    
    
    [Components]
    Name: BMP; Description: "{cm:BMP}";  Types: full compact custom;   Flags:disablenouninstallwarning;
    Name: BMP\A; Description: "{cm:Mods1}";  Types: full compact custom;  Flags:disablenouninstallwarning;
    Name: BMP\A\auto_aim_V181; Description: "{cm:Mods2}"; Types: full custom; Flags: exclusive disablenouninstallwarning;
    Name: BMP\A\AutoAim_by_SAE; Description:  "{cm:Mods3}"; Types: full compact custom; Flags: exclusive disablenouninstallwarning;
    Name: BMP\A\auto_aim_V195; Description:  "{cm:Mods4}"; Types: full custom; Flags: exclusive disablenouninstallwarning;
    
    Name: BMP\PFMods; Description: "{cm:Mods5}"; Types: full compact custom; Flags:disablenouninstallwarning;
    Name: BMP\ModificationProjectile; Description: "{cm:Mods6}"; Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\Battle_Assistant; Description: "{cm:Mods7}";  Types: full custom;  Flags:disablenouninstallwarning;
    Name: BMP\Red_stolbi; Description: "{cm:Mods8}";  Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\Arty_Intuition; Description: "{cm:Mods9}";  Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\AdvancedAimingSystem; Description: "{cm:Mods10}";  Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\USP_GPCracker; Description: "{cm:Mods11}";  Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\Circle_15metrov; Description: "{cm:Mods12}";  Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\chams; Description: "{cm:Mods13}";  Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\AO_913; Description: "{cm:Mods14}";  Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\ZJ_Modul_Reload; Description: "{cm:Mods15}";  Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\ZJ_ContourLook; Description: "{cm:Mods16}";  Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\Delete_obyekts; Description: "{cm:Mods17}";  Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\Tundra_Mod_script_ot_Makct; Description: "{cm:Mods18}";  Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\Tundra_Mod_script_ot_Makct\alt_shaders;  Description:  "{cm:Mods19}";  Types: full custom; Flags:disablenouninstallwarning;
    Name: BMP\Lasers; Description: "{cm:Mods20}";  Types: full custom; Flags: disablenouninstallwarning;
    Name: BMP\Razruch_Ob; Description: "{cm:Mods21}";  Types: full custom; Flags: disablenouninstallwarning;
    
          
    Name: BMP1; Description: "{cm:Mods22}";  Types: full compact custom;  Flags:disablenouninstallwarning;
    Name: BMP1\PM; Description: "{cm:Mods23}"; Types: full compact custom;  Flags:disablenouninstallwarning;
    Name: BMP1\Predochranitel; Description: "{cm:Mods24}"; Types: full compact custom; Flags:disablenouninstallwarning;
    Name: BMP1\OS; Description: "{cm:Mods25}"; Types: full compact custom;  Flags:disablenouninstallwarning;
    Name: BMP1\MNA; Description: "{cm:Mods26}"; Types: full compact custom;  Flags:disablenouninstallwarning;
    Name: BMP1\SG; Description: "{cm:Mods27}"; Types: full full compact custom; Flags:disablenouninstallwarning;
    Name: BMP1\RM; Description: "{cm:Mods28}"; Types: full compact custom; Flags:disablenouninstallwarning;
    
    Name: BUK; Description: "{cm:Mods29}";  Types: full compact custom;  Flags:disablenouninstallwarning;
    Name: BUK\Chasi_v_angare; Description: "{cm:Mods30}"; Types: full compact custom; Flags:disablenouninstallwarning;
    Name: BUK\Chasi_v_angare\Kalkuliator_v_angare; Description:  "{cm:Mods31}"; Types: full custom; Flags:disablenouninstallwarning;
    
    Name: VIP; Description: "{cm:Mods32}"; Types: full compact custom; Flags:disablenouninstallwarning;
    
    Name: VE; Description: "{cm:Mods33}";  Types: full compact custom; Flags:disablenouninstallwarning;
    Name: VE\OT; Description: "{cm:Mods34}";  Types: full compact custom; Flags:disablenouninstallwarning;
    Name: VE\OLVE; Description: "{cm:Mods35}";  Types: full compact custom; Flags:disablenouninstallwarning;
    Name: VE\OLVE\ODO; Description: "{cm:Mods36}";  Types: full compact custom;  Flags:disablenouninstallwarning;
    Name: VE\OLVE\ODD; Description: "{cm:Mods37}";  Types: full compact custom;  Flags:disablenouninstallwarning;
    Name: VE\OLVE\ODV; Description: "{cm:Mods38}";  Types: full compact custom;  Flags:disablenouninstallwarning;
    Name: VE\OLVE\ODUT; Description: "{cm:Mods39}";  Types: full compact custom;  Flags:disablenouninstallwarning;
    Name: VE\OLVE\ODPRIV; Description: "{cm:Mods40}"; Types: full compact custom; Flags:disablenouninstallwarning;
    Name: VE\OLVE\OEUT; Description: "{cm:Mods41}";  Types: full compact custom;  Flags:disablenouninstallwarning;
    Name: VE\OLVE\OEVS; Description: "{cm:Mods42}";  Types: full compact custom; Flags:disablenouninstallwarning;
    Name: VE\OLVE\OERP; Description: "{cm:Mods43}";  Types: full compact custom; Flags:disablenouninstallwarning;
    Name: VE\OLVE\OEPT; Description: "{cm:Mods44}";  Types: full compact custom;  Flags:disablenouninstallwarning;
    Name: VE\OLVE\OEPO; Description: "{cm:Mods45}";  Types: full compact custom;  Flags:disablenouninstallwarning;
    
    ;Name: NO_INFO_PACK; Description: Не отправлять информацию о конфиге сборки от протанки (не будет выскакивать окно о новой обнове).;  Types: full compact custom;
    
    Name: UG; Description: "{cm:Mods46}";  Types:  custom; Flags:disablenouninstallwarning;
    Name: UG\Pb13; Description: "{cm:Mods47}";     Flags: exclusive  disablenouninstallwarning;
    Name: UG\Pb13\32; Description: "{cm:Mods48}";  Types:  custom; Flags: exclusive  disablenouninstallwarning;
    Name: UG\Pb13\64; Description: "{cm:Mods49}";  Types:  custom; Flags: exclusive  disablenouninstallwarning;
    
    
    Name: UG\serzh; Description: "{cm:Mods50}"; Flags: exclusive  disablenouninstallwarning;
    Name: UG\serzh\32; Description: "{cm:Mods51}";  Types:  custom; Flags: exclusive  disablenouninstallwarning;
    Name: UG\serzh\64; Description: "{cm:Mods52}";  Types:  custom; Flags: exclusive  disablenouninstallwarning;
    
    Name: Updater; Description: "{cm:Mods53}";  Types: full compact custom; Flags: fixed;
     

    то мне надо как написать?

    к примеру к 10 компоненту

    [Code]
    procedure ComponentsListOnClickCheck(Sender: TObject);
    begin
      if (WizardForm.ComponentsList.ItemIndex = 0) and IsComponentSelected('BMP\Battle_Assistant') then
       if MsgBox('вы действительно хотите поставить этот мод, мы его не рекомендуем ставить потому что ....', mbConfirmation, MB_YESNO) = IDNO then
          WizardForm.ComponentsList.Checked[0]:= false;
    end;
    
    procedure InitializeWizard;
    begin
      WizardForm.ComponentsList.OnClickCheck:=@ComponentsListOnClickCheck;
    end;

    или это не правильно? я пробовал не работает... помогите разобраться что не так делаю. надо понять...

  2. Опубликовано 28 минут назад Nowik1971, on 29 Jan 2016 - 23:00, said:    я прошу помощи так ка сам не разбираюсь как вы, а вы тупо посылаете.... вот и помог блин, спасибо!   фао

    Спасибо! я уже доделал, пока вопросов нет, но ФАQ пригодится 

    есть еще один вопрос к Kotyarko_O как он сделал проверку на модпак в ангаре вот я здесь увидел его скрин. http://www.koreanrandom.com/forum/topic/9050-инсталлятор-для-модпаков/?p=199696.. можно такой скрипт?

  3. Изучай

     

     

    Смеёшься? Я по Русски и то не всегда правильно говорю, а ты мне англицкую речь даешь читать ..... спасибо Dark_Knight_MiX помог терпения хватило, он не послал как множество здесь. Ему +++ огромный!!! Вот результат прилепил .Barmaleykin_MultiPackFull.rar

  4.  

     

    Nowik1971, on 29 Jan 2016 - 18:16, said: В этом примере по моему чистятся, удаляются и настройки игры, а мне такого не надо, надо чтобы настройки игры сохранялись. А ты тупо не копипасть то же самое, что и там. Это пример, как всё нужно делать. Нужные тебе папки прописывай сам.   Nowik1971, on 29 Jan 2016 - 18:16, said: а во вторых как мне прицепить не в установку, а в удаление восстановление раннего бекапа и если его нет, то просто продолжить удаление пака.? По той же ссылке это есть.
     

     я прошу помощи так ка сам не разбираюсь как вы, а вы тупо посылаете.... вот и помог блин, спасибо!

  5. В этом примере по моему чистятся, удаляются и настройки игры, а мне такого не надо, надо чтобы настройки игры сохранялись. это во первых, а во вторых как мне прицепить не в установку, а в удаление восстановление раннего бекапа и если его нет, то просто продолжить удаление пака.?

  6. 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

  7.  

     

    А если в общем, то есть TNewProgressBar. asterix93, on 24 Jan 2016 - 15:57, said: harasho a kak delati stobi sabsenia bila na stranita Например,TMemo на форме вместо Msgbox
     подскажите  в примере как этот скрипт подключить и еще вопрос... я не совсем все понимаю, вот например я выложил свежую версии. пака на яндекс диск как сделать чтобы в ангаре  и при установке проверялось и выдавалось сообщение о том что есть обновление.. и гадо перейти по ссылке....

    Заранее спасибо за помощь...

  8.  

     

    Выложил исходники своего инсталлятора, может кому-то пригодится. http://www.koreanran...к-с-инсталлято/

    Отлично! Кое что мне надо почерпнуть у тебя, а именно это проверка обновлений.... как до этого дойду напишу в личку может поможешь если сам не разберусь  

  9. а так оно не пашет

     

    Я учусь и за помощь все огромное спасибо! Да и не злись на меня плюсов и тебе наставлю мне не жалко, я просто подчеркнул своим минусом, что ты просто сарказм свой показываешь , а просто помочь не смог сначала, Короче всем спасибо!

    И не посылайте меня часто ....

  10. 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;
    
  11. Имеется скрипт с этого сайта нужно максимально автоматизировать , чтобы дата и время вводилось автоматом при создании в секцию

    #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;
    

     

    ,
  12. Спасибо! первая часть кода работает, а вторая нет, ... скрипт копилируется, но во время установки он неубивает процесс игры танков, а танки его убивают вахаха, сам пишу сам ржу как  это так и пишет: в строке отладки [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; 


    Нажимаю нет и установка не продолжается пробовал менять труе на фальсе все равно

  13. Как совместить эти два скрипта

    //---------------------------------------
    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; 

  14. Что здесь творится?

    Не могу реализовать бекапирование  пробую и в юникоде версии и в анси все равно пустые папки, если только файл кидаю в 0,9,13 то он бекапируется, а все что во вложенных папках в 0,9,13 и хвм не копируется помогите плиз.

    Ты установщики распаковываешь или что? Для использования на юникоде тут скидывали файл

    я только на  8 странице и причем здесь распаковка.... ты обещал в личке и так и не дал ответ, а я твердолобый должен так же понять все

  15. Вроде доделал. Объясняю как работает:

    Через #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;
    
    Поле этого страница будет выглядить примерно вот так:

    7a11cfb9f052.png

    В общем спрашивайте, если что-то не понятно. Вроде всё доступно написал.

     

    Все папки создаются пустые и в 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; 

  16. Иннот, замени 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 бекапить и все что в ней как это сделать и ваш скрипт так и не нашел помогите ткните носом

×
×
  • Create New...