ёёёёё
Дата: 18.06.2019 12:13:56
В оснастке "Установка и удаление программ" зарегистрирован .exe - файл.
Который после запуска выполняет некоторые действия по деинсталляции, в соответствии со сценарием.
Как деинсталлятор в итоге удаляет сам себя?
Посмотрел, как сделано в NSIS и в Inno - жуть. Создается копия деинсталлятора в темп - директории, эта копия запускается и отрабатывает сценарий. А оригинал живет и радует имитацией активности вышеупомянутую оснастку, ждет завершения отработки сценария деинсталляции копией. Получив сигнал о завершении, оригинал завершается, оснастка фиксирует момент завершения. На самом деле, копия продолжает работать, дождавшись завершения работы оригинала, копия удаляет оригинал и директорию, в которой то размещается. Масса забавных телодвижений и мутного когда, ну да ладно.
А удаление копии (и хлама, используемого ею - плагинов. например) вешается на систему: в реестр, в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager, в переменную PendingFileRenameOperations заносится список файлов для удаления при перезагрузке. Удаление иногда выполняется, иногда - нет.
В темп - директории - масса мусора, в итоге.
Вопрос: почему не всегда удаляются файлы из списка PendingFileRenameOperations и как сделать, чтобы они удалялись всегда?
Гаджимурадов Рустам
Дата: 18.06.2019 13:49:24
ёёёёё> Вопрос: почему не всегда удаляются файлы
Мало ли что в винде могло пойти не так.
Лежат себе в Темре и лежат, всё равно
удалятся с очередной "чисткой файлов".
> как сделать, чтобы они удалялись всегда?
Забей.
Posted via ActualForum NNTP Server 1.5
alekcvp
Дата: 18.06.2019 14:48:04
ёёёёё,
1. Можно попробовать создавать temp-файл с флагом FILE_FLAG_DELETE_ON_CLOSE, правда я не знаю получится ли его запустить потом - там есть условия для его повторного открытия.
2. Можно написать деинсталлятор на .NET и потом
запустить его из оперативки, соответственно он сможет удалить всё что угодно.
3. Удалить самого себя, после удаления приложения, через cmd-файл (они могут удалять сами себя).
....
ёёёёё |
---|
Вопрос: почему не всегда удаляются файлы из списка PendingFileRenameOperations и как сделать, чтобы они удалялись всегда? |
Они не удаляются при некорректном завершении работы системы или при запуске какой-нибудь "особо умной" программы, которая использует этот список в своих целях и просто перезаписывает его, наплевав на то что там что-то было. Соответственно исправить это нельзя никак.
Мимопроходящий
Дата: 18.06.2019 15:00:14
18.06.2019 14:48, alekcvp пишет:
> Можно попробовать создавать temp-файл с флагом FILE_FLAG_DELETE_ON_CLOSE, правда я не знаю получится ли его запустить потом - там есть условия для его повторного открытия.
не взлетит.
для того чтоб система его грохнула при закрытии, нужно чтоб заинтересованный процесс открывал
этот файл с флагом FILE_SHARE_READ или FILE_SHARE_WRITE или FILE_SHARE_DELETE.
а винда сама по себе, по доброй воле, при запуске экзешников этого не делает.
Posted via ActualForum NNTP Server 1.5
ёёёёё
Дата: 18.06.2019 15:02:53
alekcvp,
FILE_FLAG_DELETE_ON_CLOSE - к сожалению, нельзя. В соответствии с мсдн такой файл должен открываться с опцией FILE_SHARE_DELETE, а запуск процессов из образов с такой опцией не делается.
ёёёёё
Дата: 18.06.2019 15:07:30
наверное, дешевле всего в темп-директорию выбрасывать крошечный файл-икзешник, который запускать по завершении инсталлятора, для подчистки. А сам файлик-чистильщик помечать на последующее удаление при перезагрузке, а если не сработает - то и да, фик с ним, пара килобайт в мусорке будет валяться.
kealon(Ruslan)
Дата: 18.06.2019 15:35:00
ёёёёё,
был ещё фокус с файловыми потоками, не проверял правда давно, будет ли на той же 10-ке работать и как на него антивирусы агрятся