Как удалить ключи реестра HKCU при удалении программного обеспечения? - PullRequest
8 голосов
/ 02 марта 2010

Когда мое программное обеспечение установлено через MSI, оно создает некоторые ключи реестра в HKLM. Когда люди используют программное обеспечение, их индивидуальные предпочтения сохраняются в HKCU. При удалении программного обеспечения удаляются разделы реестра HKLM и HKCU, но я думаю, что будут удалены только ключи HKCU для пользователя, который выполняет удаление. Это правильно? Если да, как я могу обеспечить удаление подразделов HKCU для других людей, которые использовали мое программное обеспечение на том же компьютере?

ОБНОВЛЕНИЕ: «Индивидуальные настройки», которые сохраняются в моем случае, на самом деле не являются настройками, которые выбрал пользователь, а скорее данными, которые приложение сохраняло во время работы для этого пользователя. Так что это не совсем данные, которые пользователь хотел бы сохранить. Кажется правильным удалить его при удалении, так как он не будет иметь никакого смысла, если приложение переустановлено. Поэтому я думаю, что лучшее предложение на данный момент - Ed's: не используйте реестр , хотя это не решает первоначальный вопрос.

Ответы [ 3 ]

3 голосов
/ 03 марта 2010

Короткий ответ - нет. Предполагается, что установщик удалит записи , которые он создает, и ничего больше. Если ваше приложение создает настройки для пользователя во время выполнения, они не принадлежат процедуре установки.

Если вы действительно действительно хотите это сделать, вы можете создать собственное действие и заставить деинсталляцию запускаться от имени администратора, чтобы вы могли получить доступ ко всем кустам пользователей. Будьте осторожны - это совершенно нестандартное поведение, и может потребоваться значительное количество времени и системных ресурсов для монтирования и размонтирования всех пользовательских ульев. А если ваш деинсталлятор не соблюдает осторожность, вы можете повредить вещи в кустах системного уровня и сделать вашу систему не загружаемой.

Как я уже упоминал в комментарии к ответу sascha, в рекомендациях установщика Windows сказано (сказано?), Что пользовательские настройки при удалении следует оставить. Таким образом, если пользователь переустанавливает ваше программное обеспечение, его настройки доступны.

3 голосов
/ 03 марта 2010

Если вы действительно хотите удалить пользовательские данные, сохраните пользовательские данные в файловой системе. Где-то вроде «Документы и настройки \ имя пользователя \ Данные приложения \ Ваша организация \ Ваше приложение». Эти данные будет тривиально удалить при удалении с помощью записи в таблице RemoveFile.

Команда разработчиков установщика Windows специально обратилась к этому в своем блоге. Смотрите «Правило 26». http://blogs.msdn.com/windows_installer_team/archive/2006/05/12/595950.aspx

Обновление:

Много лет назад я написал код, который делает то, что вы описываете с реестром, и быстро пришел, чтобы сожалеть об этом. Это была боль, но более того, у нее была проблема, связанная с привилегиями. Короткая версия заключается в том, что служба установщика не работает со всеми привилегиями, которыми обладает администратор. Они не просто отключены, они отсутствуют в маркере безопасности процесса. В частности, это включает в себя привилегию, необходимую для загрузки и выгрузки кустов реестра (насколько я помню, se_restore_privilege). Это привело к сбою кода для установки и удаления без вывода сообщений, даже если вызывающим пользователем был Admin, и я не мог просто запретить установку и удаление без вывода сообщений.

Еще одна проблема, которая еще не возникла, это Active Directory. Я не уверен, но я думаю, что то, что вы описываете, будет иметь серьезные дополнительные скачки для прыжка в среде AD.

В общем, я очень стараюсь, чтобы избежать установки или удаления касаться улья HKCU. Я обнаружил, что это является постоянным источником значительной боли при минимальной пользе.

2 голосов
/ 03 марта 2010

Это невозможно сделать, удаляются только записи для текущего пользователя.

Вы можете использовать ActiveSetup , чтобы обойти эту проблему, однако она в значительной степени недокументирована, кроме этой ссылки, и не поддерживается Microsoft. Поэтому, если вы используете его, не полагайтесь на него;)

Идея не вынимая пользовательские данные во время удаления является довольно спорной темой с некоторой довольно интересной историей ... Я помню старые версии Управления используются для сохранения документов под каталог установки, количество жалоб, которые мы использовали, чтобы получить, когда после Обновление пользователей удаляло старую папку Office и теряло их документы, это было огромно. В последнее время жалобы на то, что люди теряют свой шаблон Normal.dot.

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

С другой точки зрения, если вы удалите игру, в которую потратили часы / дни / недели - хотите ли вы, чтобы ваши сохранения были удалены? Ваши пользовательские файлы конфигурации? Что касается игры на общем семейном компьютере, кто-то удаляет игру, чтобы освободить место на диске, не подозревая, что другой член семьи играет в нее регулярно. Вы хотите иметь дело с такими жалобами от ваших клиентов?

...