Как удалить ключи реестра HKCU при удалении программного обеспечения?

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

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

8
задан Community 23 May 2017 в 12:18
поделиться

3 ответа

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

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

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

3
ответ дан 5 December 2019 в 20:15
поделиться

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

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

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

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

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

2
ответ дан 5 December 2019 в 20:15
поделиться

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

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

Обновление:

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

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

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

3
ответ дан 5 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: