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

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

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

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

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

введите описание изображения здесь

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

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


person Paul Taylor    schedule 01.07.2020    source источник
comment
Не мешают ли старые файлы izpack установке jpackage или возможности запуска программы? В противном случае я бы, вероятно, предпочел оставить их там. Когда дело доходит до программ, оставляющих после себя артефакты, я видел гораздо более серьезные нарушения.   -  person VGR    schedule 01.07.2020
comment
Нет, они не связаны с возможностью запуска программы, но 1 ›это выглядит беспорядочно, 2› если тратится дисковое пространство и 3 ›(и, что наиболее важно), если пользователи заглядывают внутрь, они могут случайно запустить неправильное старое приложение (Jaikoz64.exe, Jaikoz. bat), а не новое приложение (Jaikoz.exe)   -  person Paul Taylor    schedule 01.07.2020
comment
Похоже, вы хорошо провели неделю с jpackage, по крайней мере, он держал вас подальше от этих многолюдных пляжей. Выдержат ли старые EXE-файлы установщика в общем каталоге второй цикл выпуска вашего нового приложения при повторной установке и удалении? Если они остаются, у вас такая же проблема, но вместо того, чтобы удалять по одному, любой сценарий, который вы выполняете, может переименовать dir в dir.old, чтобы они не мешали перед запуском нового установщика - и с инструкциями для запуска от имени администратора.   -  person DuncG    schedule 02.07.2020
comment
Если пользователь запускает деинсталляцию, проблем нет, но пользователи обычно этого не делают.   -  person Paul Taylor    schedule 04.07.2020


Ответы (1)


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

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

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

person Marc Fearby    schedule 07.05.2021