Это сработало для меня, основываясь на ответе выше. Для моего приложения я разрешаю установку только для одного пользователя, а не для «всех пользователей», поэтому мне не нужно беспокоиться об удалении для нескольких пользователей или для пользователей, отличных от текущего пользователя, выполняющего удаление. Если вы разрешите установку для всех пользователей, у вас возникнут некоторые проблемы.
public override void Uninstall(System.Collections.IDictionary savedState)
{
String p = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CompanyName");
string[] ss = Directory.GetDirectories(p, "ProjectName.*");
foreach (string s in ss)
{
if(MessageBox.Show("Delete " + s + "?","Delete Settings?",MessageBoxButtons.YesNo) == DialogResult.Yes)
Directory.Delete(s, true);
}
base.Uninstall(savedState);
}
На самом деле я не собираюсь оставлять подсказку там, просто для тестирования, чтобы убедиться, что я не удаляю неправильные папки на моем ПК ... пока этот код не будет полностью протестирован. CompanyName и ProjectName необходимо изменить в соответствии с вашим проектом.
Я мог бы добавить страницу для удаления пользовательского интерфейса или просто запросить, хотят ли они удалить все настройки (чтобы они могли отказаться, если собираются переустанавливать).