如果用户卸载了您的程序,您如何处理用户数据?

时间:2009-02-04 09:53:21

标签: windows installer uninstall

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

如果用户选择卸载您的程序,您如何处理程序在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”要求的方式。

思考?我需要一个更好的备用(如果存在)或一个固体白皮书,文档或徽标要求,说卸载不应该删除用户数据。

7 个答案:

答案 0 :(得分:3)

“与此同时,普通的非管理员用户应该能够进行卸载。”

非管理员帐户永远不应该(并且永远不能)改变其他用户的数据。

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

与Raymond一起去,它可能只是一篇博文,但Raymond可能被认为不是普通的博主:)

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

答案 1 :(得分:2)

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

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

在你的情况下,你有一个客户特意想要删除数据的地方,我想这就是你将要做的事情,但如果要运行卸载,那就没有干净的方法非管理员除非按照您的建议执行,并将数据存储在每个用户都具有完整文件系统访问权限的位置。

答案 2 :(得分:2)

我不知道Windows的具体情况,但作为用户,我希望如果卸载软件,我的数据不会丢失。一些论点是:

  • 其他程序可能能够处理相同的数据
  • 我后来可以改变主意并重新安装软件
  • 其他人可能需要我可以邮寄的数据

答案 3 :(得分:2)

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

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

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

考虑以下情况

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

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

答案 4 :(得分:0)

卸载时我从不删除用户和/或配置数据。如果用户真的想要它全部消失,她应该自己做。

答案 5 :(得分:0)

我知道我参加这个聚会已经晚了几年,但是由于我现在正在寻找答案,我遇到了以下新的MSDN文章:http://msdn.microsoft.com/en-us/library/windows/apps/jj553522.aspx

它与Metro Style应用程序相关,但可能与其他类型的应用程序相关。他们的解释给出了不同类型的用户数据之间的一些急需的区别,它可以帮助开发人员决定是否删除文件。如果没有这种区别,可以理解的是,在卸载期间是否删除文件存在不同的意见:

  

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

     

应用数据

     

应用程序本身创建和管理的数据。这是可变的   特定于内部功能或配置的数据   特别的应用。它包括运行时状态,用户首选项,引用   内容(例如字典应用程序中的字典定义)和   其他设置。 应用数据与应用的存在紧密相关   只对该应用有意义。

     

用户数据

     

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

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

话虽这么说,我仍然在为其他用户寻找简单的方法,而不是当前的用户!我正在考虑将所有数据移动到App数据的目录中,以便我更容易删除它们而不必弄乱个别用户的用户数据存储。

答案 6 :(得分:0)

我最近的“智能思考”建议在程序首次运行时在相应用户的文件夹中创建“readme.txt”文件。该文件应该包含哪些文件的说明以及“免费清理此文件夹”的免责声明: - )

为了澄清这个问题,我又创建了一个,特别是与Windows徽标认证有关: Windows Logo clean uninstall

我提出了一个旧的困境,但想知道微软推荐的选择。