Один из проблемных моментов - это корректное удаление установленного приложения.
Первое, что нужно сделать - это еще при установке приложения добавить строку в реестр для удаления приложения с указанием сеции, отвечающей за деинсталяцию:
Важно! Нужно учитывать, что в случае, когда не все файлы удалены из папок, DelDirs не сработает. Если вы удаляете папку содержащую подпапки (даже пустые), DelDirs не сработает.
Так что сначала надо удалить файлы, затем подпапки, начиная с наиболее глубоко вложенной, и только затем корневую папку приложения.
Способ 2. "Радикальный"
Используется внутреняя команда библиотеки rundll32 DelNodeRunDLL32 для удаления непустых директорий.
Важно! Нужно учитывать, что в случае, когда файлы в удаляемой папке заняты системой или выполняются, DelNodeRunDLL32 не сработает. В следующем способе вы увидите метод решения этой проблемы с помощью консольной команды TASK KILL.
Способ 3. "Готовый шаблон"
Данный способ предложил Jameszero.
[Version]
Signature="$Windows NT$"
AdvancedINF=2.5
[Optional Components]
Uninst7
[Uninst7]
OptionDesc =%PROG_NAME%
Modes =0,1,2,3
AddReg =PROG.AddReg
ProfileItems =PROG.AddShortcut
Uninstall =mUninst.Uninstall
[DefaultInstall]
OptionDesc =%PROG_NAME%
Modes =0,1,2,3
AddReg =PROG.AddReg
ProfileItems =PROG.AddShortcut
Uninstall =mUninst.Uninstall
[Uninstall]
BeginPrompt =BeginUnInsPrompt
RunPreSetupCommands =Close.Prog:1
RunPostSetupCommands =Dir.Delete
EndPrompt =EndUnInsPrompt
DelReg =PROG.DelReg
ProfileItems =PROG.DelShortcut
[BeginUnInsPrompt]
Title=Деинсталляция %PROG_NAME%
Prompt=Вы действительно хотите удалить %PROG_NAME% и все компоненты программы?
PROG_INFO =" Программа для общения по ICQ протоколу"
При редактировании только одной секции [String] и переименовании секции инсталляции, можно использовать этот INF-файл для установки/удаления других аддонов. Аддоны должны быть комбинированные, т. е. сначала из Sysoc срабатывает данный INF-файл, а затем из SVCPACK запускается SFX-архив, созданый любым доступным способом, при этом SFX-архив должен просто распаковать файлы в нужную директорию.
Создание ярлыков, внесение информации в реестр (в том числе о деинсталляции) реализовано в INF-файле.
Деинсталляция перенесена из привычного для sysoc аддонов места "Установка компонентов Windows" в "Установку и удаление программ". При деинсталляции будет выдан запрос "Вы действительно хотите удалить такую-то программу?". Если программа в данный момент запущена, она будет выгружена из памяти, далее произойдёт удаление директории с программой, ярлыков и записей реестра.По окончании деинсталляции будет сообщено "Программа такая-то удалена".