Отказ от ответственности : соблюдайте осторожность при удалении всех элементов (файлов / папок).Тест на виртуалы только.Очевидно.
MSI : Вы пытались использовать RemoveFile table
в MSI?Это встроенная таблица MSI, позволяющая удалять файлы и папки в процессе установки.Только пустые папки. Образец .
WiX : есть также служебные функции dll в WiX's Util namespace
: RemoveFolderEx Element (Util Extension)
- это собственное пользовательское действие WiX, написанное на C ++, а не встроенное в MSI.Насколько я помню, вы можете удалять папки с файлами, используя этот подход.Прошло немало времени. Образец (непроверенный, используйте на свой страх и риск - очевидно).
- Изменить источник WiX (элемент верхнего уровня):
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
- Добавить ссылку на
WixUtilExtension.dll
в основной папке установки WiX в разделе Program Files (x86). - Использовать элемент:
<util:RemoveFolderEx On="install" Property="OldWebAPP" />
Проблемы с управляемым кодом : Используя вышеизложенное, вы полностью избегаете управляемого кода.Управляемый код страдает рядом уязвимостей, которые со временем проявляются - как вы уже видели.Блокировки безопасности для кода .NET, ошибочная загруженная версия .NET, проблемы с зависимостями GAC, вот старый и слишком болтливый ответ по теме (возможно, устаревшее содержимое, конечно, грязное и "чокнутое").
Проверка ошибок пользовательского действия : Обратите внимание, что вы также можете отключить проверку ошибок для пользовательского действия, к которому вы обращаетесь.Это должно позволить установщику продолжить работу без сбоев.Если это приемлемый вариант.Не очень, но возможно, я думаю.
Подавление настраиваемых действий : Наконец, если вы настраиваете настраиваемое действие значением свойства, вы можете запретить настраиваемое действиеработает, если вы передаете значение пользовательского свойства через командную строку:
Укажите в таблице свойств MSI: SUPPRESSERROR = 0
.Затем - при необходимости - в командной строке установите:
msiexec.exe /x {PRODUCT-GUID} SUPPRESSERROR="1"
Внутри MSI вы настраиваете пользовательское действие удаления с помощью:
REMOVE="ALL" AND SUPPRESSERROR="0"
Теперь настраиваемое действие не будет запускатьсяесли SUPPRESSERROR
отличается от 0
, что позволяет предотвратить запуск настраиваемого действия на компьютерах, на которых происходит сбой удаления, нажав custom uninstall command line
(обратите внимание, что настраиваемое действие все еще можно настроить на проверку ошибок).