Как удалить папку приложения при удалении - PullRequest
3 голосов
/ 01 сентября 2011
  1. Я создал установку, используя проект установки в VS 2010. Он устанавливает мое приложение в папку с программными файлами, скажем, XXX. Мое приложение также создает некоторые файлы и папки в папку XXX. Во время удаления он удаляет все, что создает, при установке, в то время как файлы и папки, созданные моим приложением, остаются там в XXX.

  2. Я написал некоторый пользовательский код для удаления папки (XXX) с использованием класса installer, но не выполняется при удалении пользователя из панели управления, а выполняется успешно при удалении из программы установки, созданной мной.

Ответы [ 4 ]

2 голосов
/ 01 сентября 2011

Первым шагом будет изменение вашего приложения, чтобы оно записывало свои данные в местоположения для каждого пользователя вместо папки приложения. Например, вы можете использовать пользовательскую папку в текущем пользовательском каталоге AppData. Таким образом вы избежите проблем, связанных с разрешениями.

Для удаления этой папки вы действительно можете использовать настраиваемое действие. Если он добавлен в разделе «Удалить» в вашем проекте установки, он должен работать как для панели управления, так и для удаления пакетов.

Попробуйте создать подробный журнал удаления и найдите свое имя для действия, чтобы увидеть, что произойдет.

1 голос
/ 30 мая 2018

НЕ ДЕЛАЙТЕ ЭТОГО! Во-первых, пользователям обычно не нравится, что их файлы данных, которые они помещают в каталог приложения, удаляются без предупреждения (они могут удалять его только потому, что хотят переместить его вдругой диск, например).Лучше предоставить конечным пользователям возможность вручную удалить их, если они этого захотят.Кроме того, если пользователь случайно установил программу в неправильный каталог (например, C: \ WINDOWS) и затем удалил ее, это может привести к катастрофическим последствиям.Или что, если пользователь скрывает свои драгоценные порно видео в папке приложения?Итак, еще раз, НЕ ДЕЛАЙТЕ ЭТОГО!

1 голос
/ 01 сентября 2011

Я предполагаю, что ваше пользовательское действие по удалению файлов запланировано в разделе пользовательского интерфейса. Когда деинсталляция запускается из панели управления, она запускается в режиме минимального пользовательского интерфейса, и все ваши диалоги пропускаются.

Ваше пользовательское действие должно быть запланировано в таблице InstallExecute.
(Чтобы быть совместимым с UAC, оно должно быть отложено с noimpersonate . Однако само ваше приложение несовместимо с UAC, поэтому это не имеет значения.)

1 голос
/ 01 сентября 2011

Я не думаю, что вам следует писать какой-либо специальный код для этого, если все ваши файлы помечены как временные и не постоянные, это будет обработано непосредственно движком MSI.

Поиграйте с конфигурацией исвойства папок, файлов и самого проекта установки, и вы получите то, что вам нужно, без написания кода.

...