5

我是一名需要弹药的开发人员。

如果用户选择卸载您的程序,您将如何处理程序保存在 HKEY_CURRENT_USER 中的数据以及用户配置文件的其他部分?

该程序将用户数据(日志等)存储在用户文件夹中。客户希望卸载以删除所有这些数据……为所有用户。同时,普通的非管理员用户应该可以进行卸载。

我找不到白皮书、文档或其他说明不应该这样做的内容。关闭是 Raymond Chen 的帖子:http: //blogs.msdn.com/oldnewthing/archive/2007/09/17/4948130.aspx

但是博客文章是弱弹药。

替代方法:在安装期间创建 %SYSTEMDRIVE%\FooProgramData。所有用户都写入此文件夹。这很丑,我知道。但这是我能想到的唯一可以满足“on-uninstall-all-files-must-be-cleared”要求的方法。

想法?我需要更好的替代品(如果存在)或可靠的白皮书、文档或徽标要求,说明卸载不应删除用户数据。

4

7 回答 7

3

“同时,普通的非管理员用户应该可以进行卸载。”

非管理员帐户不应该(也不应该)更改其他用户的数据。

在这种情况下,您最多可以做的就是删除当前用户的数据,即使这样,您也应该提示或发出警告。

和雷蒙德一起去吧,它可能只是一篇博文,但雷蒙德可以被认为不是普通的博主:)

编辑:我刚刚找到http://msdn.microsoft.com/en-us/library/bb204770.aspx#uninstall_clean但它没有明确说明用户数据

于 2009-02-04T09:59:55.517 回答
2

卸载应该删除所有客户端数据,除非客户端不希望它:)

或者,换一种说法,通用卸载程序应该让用户选择是否删除数据。

在您的情况下,如果您有一个特别希望删除数据的客户,我想这就是您必须要做的,但是如果卸载将由非运行,则没有干净的方法可以做到这一点-admin 除非您按照您的建议进行操作,并将数据存储在每个用户都可以完全访问文件系统的地方。

于 2009-02-04T09:58:09.123 回答
2

我不知道 Windows 的特殊性,但作为用户,我希望我的数据在卸载软件时不会丢失。一些论点是:

  • 其他程序可能能够处理相同的数据
  • 我以后可以改变主意并重新安装软件
  • 其他人可能需要数据,我可以邮寄给他们
于 2009-02-04T09:58:31.680 回答
2

删除所有每个用户的数据应该是一个单独的卸载过程。

我的建议(以及我们所做的)是创建一个单独的“清理”实用程序,该实用程序必须以管理员身份运行,并将通过删除其他用户文件的配置文件进行枚举。或者,它还可以枚举用户注册表配置单元并删除其他注册表项等。我们的一个客户有自己的自定义脚本可以做到这一点。

然后,我会为客户提供此清理工具,并在卸载后说,如果您想删除所有用户数据,请使用此工具。

考虑以下情况

  • 客户在安装新版本之前卸载
  • 重大升级(将卸载旧版本,因此您需要注意这一点)
  • 不应该这样做但有能力这样做的用户意外卸载

我能想到的为所有用户删除这些数据的最简洁的方法是利用Active Setup并使用它来触发每个用户的脚本,该脚本在每个用户下次登录时运行。卸载过程中不会删除数据,但会在下次登录时删除。而且您会留下一些注册表项,但是与枚举用户配置文件相比,它不太可能导致损坏。

于 2009-02-04T22:52:53.880 回答
0

卸载时我永远不会删除用户和/或配置数据。如果用户真的希望这一切都消失,她应该自己做。

于 2009-02-04T09:57:59.717 回答
0

我知道我参加这个聚会晚了几年,但是当我自己现在正在寻找这个问题的答案时,我遇到了以下新的 MSDN 文章:http: //msdn.microsoft.com/en-us/库/windows/apps/jj553522.aspx

它与 Metro Style 应用程序有关,但可能与其他类型的应用程序有关。他们的解释在不同类型的用户数据之间提供了一些非常需要的区别,它可以帮助开发人员决定是否删除文件。没有这个区别,在卸载过程中是否删除文件存在如此不同的意见是可以理解的:

应用程序经常管理或与之交互的数据有两种:

应用程序数据

应用程序本身创建和管理的数据。它是特定于特定应用程序的内部功能或配置的可变数据。它包括运行时状态、用户偏好、参考内容(例如字典应用程序中的字典定义)和其他设置。应用程序数据与应用程序的存在相关,并且仅对该应用程序有意义。

用户数据

用户在使用应用程序时创建和管理的数据。它包括文档或媒体文件、电子邮件或通信记录,或保存用户创建的内容的数据库记录。请注意,用户选择的首选项或应用配置选项被视为应用数据,而不是用户数据。独立于单个应用程序的用户数据可能对多个应用程序有用或有意义。通常,这是用户想要作为独立于应用程序本身的实体(例如文档)来操作或传输的数据。

注意这里用粗斜体显示的句子。如果有问题的文件在没有应用程序的情况下毫无意义,如果它们包含该应用程序的用户首选项(例如user.config),那么即使它可能位于用户数据目录中,也不应将其视为用户数据。它应该被认为属于应用程序并在卸载时被删除。

话虽如此,我仍在为当前用户以外的其他用户寻找简单的方法!我正在考虑将所有这些数据移动到应用数据的目录中,这样我就可以更轻松地删除它们,而不必弄乱单个用户的用户数据存储。

于 2012-10-04T15:40:53.963 回答
0

我最近的“聪明的想法”倾注于建议在程序首次运行时在相应用户的文件夹中创建“readme.txt”文件。该文件应包含说明哪些文件是什么,还有一个免责声明“请随意清理此文件夹”:-)

只是为了澄清这个问题,我又创建了一个,专门与 Windows 徽标认证相关: Windows Logo clean uninstall

我提出了一个老难题,但想知道微软推荐哪一种选择。

于 2012-11-06T17:30:15.107 回答