Я предпочитаю метод, используемый другим заголовком (и страница AdvUninstLog также упоминает это как альтернативу): https://nsis.sourceforge.io/Uninstall_only_installed_files
Как и AdvUninstLog, для удаления используется журнал удаления только установленные файлы и записи реестра, хотя этот заголовок требует, чтобы вы использовали макросы, которые обертывают ваш File, WriteRegStr, et c. звонки.
Я обнаружил, что это хороший способ разрешить отмененной установке откатить свои изменения в сочетании с этим заголовком: https://nsis.sourceforge.io/InstFiles_Cancel_-_Allowing_a_user_to_cancel_installation_during_InstFiles (хотя учтите, что если вам нужно чтобы откатить обновление, это немного сложнее, так как вам нужно сначала сделать резервную копию существующей установки.
Этот заголовок имеет много тех же преимуществ AdvUninstLog, но преимущество AdvUninstLog перед это то, что даже если вы используете подстановочные знаки при вызовах файлов, ваша деинсталляция удалит только те файлы, которые были фактически установлены, но цена может привести к низкой производительности, которую вы наблюдали. В обоих случаях вам нужно выяснить, как вы хотите работать с файлами, добавленными после факта.
Re: Вопросы № 1 и № 2, даже на странице AdvUninstLog упоминается этот недостаток (хотя и не почему). Что касается вопроса № 3, он неясен, но, возможно, вы пытались сделать это перед закрытием Uninstall.dat. В крайнем случае, вы всегда можете использовать «RMDir / r / REBOOTOK» и разрешить Windows завершить sh очистку после перезагрузки.