Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.10.49] |
|
Сообщ.
#1
,
|
|
|
Приветствую!
Недавно приобщился к Inno Setup, раньше инсталляторов не делал. Попытался поискать ответ на свой вопрос и на этом форуме, и в Гугле - ничего найти не удалось. Всюду речь о ключе uninsneveruninstall, а вот с ним-то у меня проблема. Вопрос вот в чем. Пользователь установил программу, работает с ней, в ходе работы могут изменяться какие-то его файлы. Например, мне нужно, чтобы файл "AppConfig.ini", куда что-то может записываться, не удалялся и не изменялся при последующих удалениях/переустановках моей программы. В этом случае советуют использовать ключ uninsneveruninstall. Я провел ряд экспериментов - безуспешно... Вот что я делал: Добавил строчку чтобы защитить нужный файл от удаления. ;;; Проба 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". Так, с этим не получилось. Пробую переставить нужную строку. ;;; Проба 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] Снова пробую. ;;; Проба 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 Кбайт, скачиваний: 12) |
Сообщ.
#2
,
|
|
|
Причина ошибки в том, что 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 из строчки, которой ты папку процессишь: 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 |
Сообщ.
#3
,
|
|
|
Огромное Спасибо, уважаемый jack128!
Команда Excludes: прекрасно сработала! А также отпала тревога за ключ onlyifdoesntexist - он тоже работает. Похоже, что проблема решена. Большое спасибо за помощь, друзья! |