С помощью JPackage или Java, как удалить файлы, созданные с помощью предварительной установки JPackage

Раньше я использовал Izpack для установки своего Java-приложения, и когда пользователи хотят установить новую версию, они просто переустанавливают ее в то же место (C"/Program Files/Jthink/Jaikoz"), это заменяет старые файлы более новыми файлами, и там пользователю не нужно было сначала удалять старую версию.

Теперь я создал установщик с использованием JPackage (теперь часть Java, JDK 14) для последней версии приложения, он продолжает установку в том же месте. Проблема в том, что JPackage применяет новую файловую структуру (подкаталоги приложения и времени выполнения), мои файлы больше не перезаписывают мои существующие файлы, поэтому теперь у меня две установки перепутались.

Поэтому я добавил код в последнюю версию для удаления старых, больше не нужных файлов, когда я запустил свое приложение. Но проблема в том, что это не удается, потому что у меня нет разрешения на удаление этих файлов, я думаю, это потому, что они были установлены установщиком (я не уверен)

например, здесь мы показываем группы старых файлов, только Системные и Администраторы имеют права изменять / удалять файлы.

Если я запускаю от имени администратора, то код удаляет файлы без проблем, но клиент обычно не запускается от имени администратора, поэтому это не очень помогает.

Какие у меня варианты?

2 ответа

Похоже, что вам нужно передать jpackage следующий аргумент, чтобы идентифицировать установщики для того же приложения: --win-upgrade-uuid "your_uuid_string". Как всегда с документацией Java / Oracle, они не могли бы быть более загадочными, если бы попытались.

Я также обнаружил, что мне также нужно увеличивать номер версии, иначе установщик будет быстро мигать и просто зависнет в фоновом режиме и ничего не будет делать (пока вы не перезагрузитесь или не завершите задачу): --app-version 1.0.1

Вы можете сгенерировать UUID здесь: https://www.uuidgenerator.net/

Если вы передадите аргумент «--win-per-user-install» вашей команде jpackage, msi установит приложение в «C:/User/x/AppData/Local» и получит разрешение на запись в свою собственную папку.

Это поможет только очистить файлы в будущем, но старые в C:/Programme боюсь, я тоже не знаю. Если вы можете прочитать папку с вашим application. Вы, конечно, можете дать инструкции из своего приложения, как пользователи могут самостоятельно очистить старые файлы, если вы обнаружите старые файлы.

Другие вопросы по тегам