我可以确定在 ClickOnce 更新之间没有清除用户本地数据库吗?

Posted

技术标签:

【中文标题】我可以确定在 ClickOnce 更新之间没有清除用户本地数据库吗?【英文标题】:Can I be sure a user-local database isn't cleared out between ClickOnce updates? 【发布时间】:2013-06-20 15:39:35 【问题描述】:

我有一个带有 *.sdf 文件的 ClickOnce 应用程序,我将其用作数据库。每个用户都有一个本地数据库。我想确保当我向我的应用程序部署新更新时,用户不会丢失其本地数据库中的任何数据。

我运行了一个简单的测试,似乎是在应用程序更新之间保存了数据库记录。然而,我检查了数据库连接字符串,并且应用程序使用的 *.sdf 文件在更新之间是 不同 的。看起来 *.sdf 文件位于临时文件夹中:

Version 1: C:\Users\username\AppData\Local\Apps\2.0\Data\BTC7847T.TGN\
  RX0XEL7T.28C\db_v..tion_5b84da8ac499fbd9_0001.0000_218dbb369a32672c\Data\db.sdf

Version 2: C:\Users\username\AppData\Local\Apps\2.0\Data\BTC7847T.TGN\
  RX0XEL7T.28C\db_v..tion_5b84da8ac499fbd9_0001.0000_228bdaad95bad96c\Data\db.sdf

这些文件夹路径不一样,但*.sdf文件中的数据一样的。这是巧合吗?或者我可以确保用户在应用程序更新之间不会丢失数据?

【问题讨论】:

【参考方案1】:

由于我看到C:\Users\username\AppData\Local\...,我猜.sdf 文件被标记为数据文件。

来自 MSDN 上的 How ClickOnce Performs Application Updates 和 Accessing Local and Remote Data in ClickOnce Applications(数据目录和应用程序版本):

应用程序的每个版本都有自己的数据目录,即 与其他版本隔离。 (...) 安装新版本的应用程序时,ClickOnce 将从以前版本的数据中复制所有现有数据文件 目录进入新版本的数据目录——无论它们是 包含在原始部署中或由应用程序创建。

ClickOnce 会将旧版本的文件替换为新版本 如果数据文件在 旧版本的应用程序与新版本一样。

这意味着如果.sdf不改变你不会丢失数据,文件将被复制(只是文件的路径会随着数据目录的变化而改变)。

此外,如果应用程序的早期版本创建了一个新文件,该文件包含 与新版本部署中包含的文件同名, ClickOnce 将用新文件覆盖旧版本的文件。 在 在这两种情况下,旧文件都会被包含在一个子目录里面 名为 .pre 的数据目录,这样应用程序仍然可以 访问旧数据以进行迁移

未经测试,但这意味着如果 .sdf 源发生更改并在客户端重新创建,您仍然可以访问以前的用户数据。

【讨论】:

以上是关于我可以确定在 ClickOnce 更新之间没有清除用户本地数据库吗?的主要内容,如果未能解决你的问题,请参考以下文章

Clickonce 下载更新 值不在预期范围内问题!

Clickonce - 部署在共享文件夹中的 winforms 应用程序

如何在 Visual Studio 2010 Express 中禁用 ClickOnce(或至少显示“您确定要安装此程序”窗口

ClickOnce 和 .NET 5:用户设置未更新

如何让ClickOnce进行手动更新

ClickOnce 完成卸载