2010-02-14 62 views
5

我有一个简单的WPF应用程序,它使用ClickOnce来处理安装。在此应用程序内是一个紧凑的数据库通过测试,我发现当我发布一个新版本时,这个数据库将被覆盖,这不是我想要的。无论如何,我可以精确控制哪些文件被更新?我假定ClickOnce只是简单地检查数据库文件的散列,并确定它已经改变并且更新了。当涉及压缩数据库时,ClickOnce安装程序如何处理更新?

作为一种解决方法,我已经从发布的应用程序中包含的文件中删除数据库,以便在更新之后原始保留在客户端计算机上。

不是一个很好的解决方案,我知道

感谢,

+0

数据库导致哈希值发生变化的是什么?你认为你会*希望*将来推出新版本的数据库吗? – codeConcussion 2010-02-15 14:18:56

+0

真的不应该有任何改变,据我可以看到,除了创建/修改时间戳或许。我可能想在某个时候更新数据库,但是现在我想Im在Im发布的版本中的数据库与原始版本有不同的散列,因此clickonce每次都要覆盖,这意味着用户会丢失数据。 – Sergio 2010-02-15 14:27:50

回答

5

的ClickOnce部署隔离的应用程序文件“包含”或“数据文件”。您可以通过转至项目“属性”页面,“发布”选项卡,然后单击“应用程序文件...”按钮来指定Visual Studio中每个文件的内容。然后,您可以将.sdf文件设置为“发布状态”列下的“数据文件”。

随着ClickOnce应用程序下载的数据文件将被放置在每个新版本的单独目录中。

这个想法是,在第一次运行新的应用程序版本时,您将从旧版本的数据文件中检索所有用户的私有数据,并将该数据合并到新数据文件中版。

我想你会在Accessing Local and Remote Data in ClickOnce Applications找到你需要的信息。具体来说,请查看“ClickOnce数据目录”和“数据目录和应用程序版本”部分。

要访问位于您的数据目录中的SQL Server CE数据库,使用类似于下面的连接字符串:

<add 
    name="MyApplication.Properties.Settings.LocalCacheConnectionString" 
    connectionString="Data Source=|DataDirectory|\LocalCache.sdf" 
    providerName="Microsoft.SqlServerCe.Client.3.5" /> 

的 “| DataDirectory目录|”是SQL CE和SQL Express支持的特殊语法,并在运行时解析到适当的目录。

+0

我的以前版本的MDF文件如何看起来有新版本的“修改日期”?你认为以前的版本数据目录有可能被新的数据文件覆盖吗? – 2013-05-30 04:56:51

2

如果你在以上打开 SQLCE数据库包含在你的项目中,它会改变数据库的时间戳,ClickOnce会部署它并把旧版本放在\ pre子文件夹下。

您可能需要考虑this method来处理此问题。那么如果你不小心部署了一个新版本的数据库,并没有意识到它,那么你就没有了。如果您故意进行更改,则可以使用SQL查询更改当前数据库的数据库结构,并在需要时从部署到数据目录的新副本中提取数据(您将忽略)。

RobinDotNet

相关问题