Потому что это невозможно.
В реестре есть несколько корневых узлов, но только два интересных: LocalMachine и CurrentUser . Как правило, программа установки записывает значения в LocalMachine, а работающая программа записывает ТОЛЬКО в CurrentUser (на самом деле, если программа не перепутана с разрешениями, запущенная программа не может записывать в LocalMachine.)
Хотя хранить остатки в LocalMachine - это лень, как указывают другие ответы, очистка пользовательской части невозможна.
Если программа установлена на машину (а большинство из них) и ее используют несколько пользователей, что должен делать деинсталлятор? Он может безопасно удалить пользовательские настройки текущей учетной записи, но текущая учетная запись может не являться вашей учетной записью. (Это происходит, если вы запустили деинсталлятор из учетной записи не администратора, а затем ввели учетные данные учетной записи администратора - установка теперь выполняется под этой учетной записью, а не первой).
А как насчет других пользователей? Он может попытаться перечислить всех пользователей, но их ключи реестра могут быть не загружены. (Windows ленива и загружает только то, что ей нужно.)
Но ты не должен даже пробовать это. Если вы используете перемещаемые профили, например, для служб терминалов, а затем удаляете все параметры при удалении, вы можете действительно испортить и удалить материал, который фактически все еще используется.
Терминальный сервер - это, по сути, один компьютер с Windows, на котором несколько пользователей одновременно входят в систему и используют приложения.
Допустим, у вас есть два терминальных сервера, на которых запущено одно приложение. Вы удаляете приложение на TS1, теперь все настройки для всех пользователей ушли на TS2, потому что у вас есть перемещаемые профили. упс.
То же самое относится и к файлам в пользовательских каталогах.
При настройке программы моей компании я удаляю данные для каждого компьютера, но не затрагиваю данные для каждого пользователя, даже для пользователя, который в данный момент запускает установку.