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

Windows 如果用户卸载了您的程序,您将如何处理用户数据?,windows,installation,uninstallation,Windows,Installation,Uninstallation,我是一个需要弹药的开发者 如果用户选择卸载您的程序,您如何处理HKEY_CURRENT_user中保存的程序数据以及用户配置文件的其他部分 程序将用户数据(日志等)存储在用户文件夹中。客户端希望卸载以删除所有用户的所有数据。同时,普通非管理员用户应该能够执行卸载 我还没有找到一份白皮书、文档或其他文件表明不应该这样做。以下是陈雷蒙的帖子: 但是一篇博客文章的威力很弱 备选方案:在安装期间创建%SYSTEMDRIVE%\FooProgramData。所有用户都会写入此文件夹。我知道这很难看。但这

我是一个需要弹药的开发者

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

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

我还没有找到一份白皮书、文档或其他文件表明不应该这样做。以下是陈雷蒙的帖子:

但是一篇博客文章的威力很弱

备选方案:在安装期间创建%SYSTEMDRIVE%\FooProgramData。所有用户都会写入此文件夹。我知道这很难看。但这是我能想到的唯一能够满足“卸载时必须清除所有文件”要求的方法


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

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

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

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


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

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

  • 其他程序可能能够处理相同的数据
  • 我可以稍后改变主意,重新安装软件
  • 其他人可能需要这些数据,我可以把它们邮寄给他们
“同时,普通非管理员用户应该能够执行卸载。”

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

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

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


编辑:我刚刚发现,但它没有明确说明用户数据

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

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

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

考虑以下情况

  • 客户在安装新版本之前卸载
  • 主要升级(将卸载旧版本,因此您需要了解这一点)
  • 本不应执行此操作但有能力执行此操作的用户意外卸载

对于我所能想到的所有用户来说,删除这些数据最干净的方法是利用这些数据,并使用它们触发每个用户下次登录时运行的每个用户脚本。卸载期间不会删除数据,但会在下次登录时删除。你会留下一些注册表项,但是这比列举用户配置文件更不可能导致损坏。

我知道我参加这次聚会晚了几年,但由于我现在正在自己寻找答案,我遇到了以下新的MSDN文章:

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

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

应用程序数据

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

用户数据

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

请注意此处显示的粗体斜体句子。如果没有应用程序,所讨论的文件没有意义,如果它们包含该应用程序的用户首选项(例如
user.config
),则不应将其视为用户数据,即使它可能位于用户数据目录中。应将其视为属于该应用程序,并将其删除