На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ Inno Setup
Пожалуйста, выделяйте текст инсталлятора написанного на Inno Setup тегом [сode=ins] ... [/сode]. Для этого используйте кнопку [code=ins] в форме ответа или комбобокс, если нужно вставить код из другой программы.


Обязательно указывать:

  • Программу, используемую для создания инсталлятора.



Если в ходе решения проблемы возникли дополнительные вопросы, по возможности задаем их в той же теме.


Выразить свое отношение к модераторам раздела можно здесь: Profi, Fester
Модераторы: Fester, Profi
  
> Установка нужной версии, InnoSetup
    ExpandedWrap disabled
      [Setup]
      AppName=FL
      AppVerName=FL 12.4.1.0
       
      DefaultDirName={code:GetDirName}
      DisableDirPage=yes
       
      DisableFinishedPage=no
      DisableReadyPage=no
      DisableWelcomePage=no
       
      [Code]
      procedure ExitProcess(exitCode:integer); external 'ExitProcess@kernel32.dll stdcall';
       
      function GetDirName(Value: string): string;
      var
        InstallPath: string;
      begin
       
        if RegQueryStringValue(HKCU, 'Software\Image-Line\Shared\Paths', 'Shared DLLs', InstallPath) then
          Result := InstallPath
          else
       
        begin
        MsgBox('FL not exist', mbCriticalError, mb_Ok)
        ExitProcess(0)
        end
       
      end;


    Нужен какой-нибудь способ замены файла, напримрер: elastique_x64.dll, например на более старую версию.

    Либо просто замена после проверки, например:
    (If) если запись в реестре существует, то копируется один файл,
    если записи не существует, (then)то копируется другой файл...
    Запись в реестре нужно заодно удалять в одном из условий.

    Пусть ориентиром будет EEKbLabelWhites:
    Root: HKCU; Subkey: "Software\Image-Line\FL Studio 12\General\FruityLoopsMainForm"; ValueName: "EEKbLabelWhites"; Flags: deletevalue noerror; Permissions: everyone-full

    Выше часть моего инсталятора, чтобы не подгонять потом под код, ато я плохо в паскале ориентируюсь.
    И я не знаю как в секции [Files] устанавливать выборочно нужные группы файлов.
    Установка без диалогов.

    Смысл в универсальности установки: обновления/отката в одном инсталяторе. Просто как грамотно написать.
    Сообщение отредактировано: semiono -
    xchg eax,eax
      Life is what happens to you while you're busy making other plans.
      Моя страница в Google+
        ExpandedWrap disabled
          [Setup]
          AppName=!
          AppVerName=! 0.0.0.0
          DefaultDirName={pf}\!
          OutputDir=.
          OutputBaseFilename=!
           
           
          [Code]
          function FruityLoopsMainForm(): Boolean;
          begin
            if RegDeleteValue(HKEY_CURRENT_USER, 'Software\Image-Line\FL Studio 12\General\FruityLoopsMainForm', 'EEKbLabelWhites1') then
               Result := true
          end;
           
          [Files]
          Source: "1.TXT"; DestDir: "{sd}"; Check: FruityLoopsMainForm
          Source: "2.TXT"; DestDir: "{sd}"; Check: not FruityLoopsMainForm


        Что-то не получается :'(

        Похоже моя функция ничего не возвращает, а как это сделать?
        Сообщение отредактировано: semiono -
        xchg eax,eax
          ExpandedWrap disabled
            [Code]
            function FruityLoopsMainForm(): Boolean;
            begin
              if RegValueExists(HKCU, 'Software\Image-Line\FL Studio 12\General\FruityLoopsMainForm', 'EEKbLabelWhites') then
                begin
                Result := true
                end
                else
                begin
                Result := false
                end
            end;
             
             
            [Registry]
            ; FruityLoopsMainForm
            Root: HKCU; Subkey: "Software\Image-Line\FL Studio 12\General\FruityLoopsMainForm"; ValueName: "EEKbLabelWhites"; Flags: deletevalue noerror; Permissions: everyone-full; Check: FruityLoopsMainForm
             
            ; not FruityLoopsMainForm
            Root: HKCU; Subkey: "Software\Image-Line\FL Studio 12\General\FruityLoopsMainForm"; ValueType: string; ValueName: "EEKbLabelWhites"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: not FruityLoopsMainForm



          Секция Registry срабатывает раньше и Code не работает. <_<

          Нужно сделать, чтобы каждый раз удалалось/записывалось value в реестре согласно условию
          xchg eax,eax
            ExpandedWrap disabled
              [Code]
              function x(): Boolean;
              begin
                if RegValueExists(HKCU, 'Software\aaaa', 'bbbb') then
                begin
                Result := RegDeleteValue(HKCU, 'Software\aaaa', 'bbbb')
                end
                else
                begin
                Result := RegWriteStringValue(HKCU, 'Software\aaaa', 'bbbb' ,'0')
                end
              end;


            Не пойму что не так?
            xchg eax,eax
              Цитата semiono @
              Не пойму что не так?

              X всегда возвращает True. Может дело в этом?
              Life is what happens to you while you're busy making other plans.
              Моя страница в Google+
                ExpandedWrap disabled
                  [Setup]
                  AppName=!
                  AppVerName=! 0.0.0.0
                  DefaultDirName={pf}\!
                  OutputDir=.
                  OutputBaseFilename=!
                   
                   
                  [Code]
                  function x(): Boolean;
                  begin
                    if RegValueExists(HKCU, 'Software\a', 'b') then
                    begin
                    Result := true
                    end
                    else
                    begin
                    Result := false
                    end
                  end;
                   
                   
                  [Registry]
                  ; x
                  Root: HKCU; Subkey: "Software\aaaa"; ValueType: none; ValueName: "b"; Flags: deletevalue noerror; Permissions: everyone-full; Check: x
                   
                  ; not x
                  Root: HKCU; Subkey: "Software\aaaa"; ValueType: string; ValueName: "b"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: x
                   
                  [Files]
                  Source: "1.TXT"; DestDir: "{sd}"; Check: x
                  Source: "2.TXT"; DestDir: "{sd}"; Check: not x


                Вроде бы реагирует, но как сделать чтобы результат всегда был противоположным?
                Сейчас установка реагирует на запись в реестре, но за вторым разом всегда выполняет одно и то же действие.
                Мне нужно чтобы инсталятор сам изменял будущее условие.
                xchg eax,eax
                  Все-таки не до конца понятно что именно нужно.
                  Life is what happens to you while you're busy making other plans.
                  Моя страница в Google+
                    ExpandedWrap disabled
                      [Setup]
                      AppName=!
                      AppVerName=! 0.0.0.0
                      AllowUNCPath=no
                      DefaultDirName={code:GetDirName}
                      DirExistsWarning=no
                      DisableDirPage=yes
                      DisableFinishedPage=no
                      DisableProgramGroupPage=yes
                      DisableReadyMemo=yes
                      DisableReadyPage=no
                      DisableWelcomePage=no
                      ArchitecturesAllowed=x64
                      ArchitecturesInstallIn64BitMode=x64
                      MinVersion=0,6.0
                      Compression=lzma/ultra64
                      SolidCompression=yes
                      OutputDir=.
                      OutputBaseFilename=zzzz
                      TouchDate=2001-01-01
                      TouchTime=00:00:00
                      Uninstallable=no
                      UsePreviousAppDir=no
                       
                      [Code]
                      procedure ExitProcess(exitCode:integer); external 'ExitProcess@kernel32.dll stdcall';
                       
                      function GetDirName(Value: string): string;
                      var
                        InstallPath: string;
                      begin
                       
                        if RegQueryStringValue(HKCU, 'Software\$', 'Path', InstallPath) then
                          Result := InstallPath
                          else
                       
                        begin
                        MsgBox('$ not exist', mbCriticalError, mb_Ok)
                        ExitProcess(0)
                        end
                       
                      end;
                       
                      function x(const a: string): Boolean;
                      begin
                        Result := not RegValueExists(HKCU, 'Software\$', 'EEKbLabelWhites')
                        if not Result then
                          RegDeleteValue(HKCU, 'Software\$', 'EEKbLabelWhites')
                      end;
                       
                      function y(const a: string): Boolean;
                      begin
                        Result := not RegValueExists(HKCU, 'Software\$', 'EEKbViewStyle')
                        if not Result then
                          RegDeleteValue(HKCU, 'Software\$', 'EEKbViewStyle')
                      end;
                       
                      function z(): Boolean;
                      begin
                        Result := not RegValueExists(HKCU, 'Software\$', 'EEKbViewStyle')
                      end;
                       
                      [Registry]
                      Root: HKCU; Subkey: "Software\$"; ValueType: string; ValueName: "EEKbLabelWhites"; ValueData: "0"; Permissions: everyone-full; Check: x('')
                      Root: HKCU; Subkey: "Software\$"; ValueType: string; ValueName: "EEKbViewStyle"; ValueData: "4"; Permissions: everyone-full; Check: y('')
                       
                      [Files]
                      Source: "New File.txt"; DestDir: "{code:GetDirName}"; Flags: ignoreversion; Permissions: everyone-full; Check: z
                      Source: "New File (2).txt"; DestDir: "{code:GetDirName}"; Flags: ignoreversion; Permissions: everyone-full; Check: not z


                    Всё работает правильно! Скажите пожалуйста, здесь можно улучшить код или всё итак оптимально?
                    xchg eax,eax
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script Execution time: 0,1044 ]   [ 14 queries used ]   [ Generated: 24.07.19, 00:50 GMT ]