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


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

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



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


Выразить свое отношение к модераторам раздела можно здесь: Profi, Fester
Модераторы: Fester, Profi
  
> Inno Setup 6.2.0: Не работает ключ uninsneveruninstall, Нужно сохранить файл/файлы пользователя
    Приветствую!

    Недавно приобщился к Inno Setup, раньше инсталляторов не делал. Попытался поискать ответ на свой вопрос и на этом форуме, и в Гугле - ничего найти не удалось. Всюду речь о ключе uninsneveruninstall, а вот с ним-то у меня проблема.

    Вопрос вот в чем. Пользователь установил программу, работает с ней, в ходе работы могут изменяться какие-то его файлы. Например, мне нужно, чтобы файл "AppConfig.ini", куда что-то может записываться, не удалялся и не изменялся при последующих удалениях/переустановках моей программы. В этом случае советуют использовать ключ uninsneveruninstall. Я провел ряд экспериментов - безуспешно...

    Вот что я делал:
    Добавил строчку чтобы защитить нужный файл от удаления.

    ExpandedWrap disabled
      ;;; Проба 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       
      [Files]
      Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
      Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
      ; Добавил строчку чтобы защитить нужный файл от удаления
      Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\Configs\AppConfig.ini"; DestDir: "{app}\Configs"; Flags: onlyifdoesntexist uninsneveruninstall

    Результат после деинсталляции - удаляет вообще все файлы и каталоги, вместе с этим злосчастным "AppConfig.ini".
    Так, с этим не получилось. Пробую переставить нужную строку.

    ExpandedWrap disabled
      ;;; Проба 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       
      [Files]
      Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
      ; Переставил строку повыше
      Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\Configs\AppConfig.ini"; DestDir: "{app}\Configs"; Flags: onlyifdoesntexist uninsneveruninstall
      Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

    Результат после деинсталляции - каталог остался, но он пуст, файла "AppConfig.ini" в нем нет.
    [Паранойя ON] А вдруг в "{app}\Configs" обратной скобки не хватает? [Паранойя OFF] Снова пробую.

    ExpandedWrap disabled
      ;;; Проба 3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       
      [Files]
      Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
      ; Пытаюсь сохранить от удаления файл "AppConfig.ini"
      Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\Configs\AppConfig.ini"; DestDir: "{app}\Configs\"; Flags: onlyifdoesntexist uninsneveruninstall
      Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

    Результат после деинсталляции точно такой же: каталог остался, но он пуст (что и ожидалось).

    Что дальше делать - ума не приложу. А ведь еще и с флагом onlyifdoesntexist предстоит бороться...

    Помогите, пожалуйста!

    P.S. Если кто заинтересуется, то файл инсталлятора "InnoTest1_Setup.exe" я порождал программой Inno Setup 6.2.0. В файле "InnoTest1.iss" дефайном #define MyWorkDisk "E:" указывается, на какой диск этот архив распаковать.
    Прикреплённый файлПрикреплённый файлInnoTestProbe.7z (86,37 Кбайт, скачиваний: 7)
    Сообщение отредактировано: jur -
      Причина ошибки в том, что Inno достаточно просто подходит к обработке файлов. При ининстале - он действительно согласно этой строке
      Цитата jur @
      Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\Configs\AppConfig.ini"; DestDir: "{app}\Configs"; Flags: onlyifdoesntexist uninsneveruninstall

      сохраняет конфиг.

      Но согласно этой строке:
      Цитата jur @
      Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

      он удаляет все содержимое папки, включая конфиг.

      Решение очевидно, исключить AppConfig из строчки, которой ты папку процессишь:
      ExpandedWrap disabled
        Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\Configs\AppConfig.ini"; DestDir: "{app}\Configs"; Flags: onlyifdoesntexist uninsneveruninstall
        Source: "{#MyWorkDisk}\1my\InnoTest1_Install_packet\*"; DestDir: "{app}"; [B]Excludes: "Configs\AppConfig.ini";[/B] Flags: ignoreversion recursesubdirs createallsubdirs
        Огромное Спасибо, уважаемый jack128!

        Команда Excludes: прекрасно сработала! А также отпала тревога за ключ onlyifdoesntexist - он тоже работает. Похоже, что проблема решена.

        Большое спасибо за помощь, друзья!
        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0206 ]   [ 15 queries used ]   [ Generated: 7.12.21, 15:55 GMT ]