MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Как деинсталляторы удаляют директории, в которых они находятся?"
Answer 906275
Есть вариант, что uninstaller может создать исполняемый файл (tmpUninstaller.exe) в какой-то временной директории, запустить его, tmpUninstaller.exe ждёт когда завершится оригинальный uninstaller, зачищает всё и самоудаляется.
Правильно мыслите
Вот полная строка события из Process Monitor:
8:26:29,1260988 unins000.exe 20396 Process Create C:\Users\8CE3D~1\AppData\Local\Temp\_iu14D2N.tmp SUCCESS PID: 9672, Command line: "C:\Users\8CE3D~1\AppData\Local\Temp\_iu14D2N.tmp" /SECONDPHASE="C:\Program Files (x86)\SHTRIH-M\DrvFR 4.13\unins000.exe" /FIRSTPHASEWND=$3B1228 /INITPROCWND=$680CC6
Есть и другие способы создания самоудаляющейся программы: Самоудаление программы
Но, как по мне, это костыльный вариант решения поставленной задачи. Как же всё-таки uninstaller удаляет директорию в которой он находится?
Инсталлятор программы в примере выше сделан с помощью Inno Setup, которая не использует модель Windows Installer. Для инсталляторов, основанных на модели Windows Installer, необходимости в деинсталляторе как таковом вообще нет. При установке такой программы Windows Installer сохраняет ее MSI-пакет в каталоге
c:\windows\installer
. Для удаления программы достаточно вызвать msiexec с нужными параметрами, он загрузит сохраненный MSI, выполнит удаление, а затем удалит MSI.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.