Я использую Inno Setup для упаковки Java-приложения для Windows; дерево приложения выглядит следующим образом:
Код: Выделить всё
| MyApp.jar
\---lib
| dependency-A-1.2.3.jar
| dependency-B-2.3.4.jar
| dependency-Z-x.y.z.jar
Я использую Ant для предварительной подготовки всего дерева (всех файлов и папок), включая каталог lib (используя подстановочный знак *.jar для копирования зависимостей) ), то я просто вызываю ISCC с помощью:
Код: Выделить всё
[Files]
Source: "PreparedFolder\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
Теперь
Мне нужно очищать каталог lib каждый раз, когда пользователь обновляет приложение, поскольку я хочу удалить все устаревшие зависимости. Я мог бы добавить следующий раздел в свой файл .iss:
но я не чувствую себя в безопасности, потому что, если пользователь решит установить приложение в существующую папку, содержащую непустую подпапку lib (редко, но не невозможно), существует вероятность того, что некоторые пользовательские файлы будут удалены при обновлении.
Есть ли какой-нибудь лучший способ избежать подобных проблем? Другие установщики решают эту головную боль? Спасибо.
Подробнее здесь:
https://stackoverflow.com/questions/460 ... inno-setup