所以我继续测试并发布对我的应用程序的更改,我遇到了一个痛点,我不确定如何处理。
首先,我的应用程序使用SQL Server CE数据库来存储信息,我需要能够对此数据库进行更改,因此我创建了一个内部更新过程,该过程在应用程序运行时运行,以确保数据库是最新的。
此内部更新过程的关键是另一个名为DBUpdates.sdf的SDF文件,其中包含需要应用的所有数据库架构更改。
我遇到的问题是我创建的MSI发行版不会覆盖此文件。当SQL Server CE打开此文件时,它会更改文件的修改日期/时间。这是文件已更改的MSI进程的标志,并且它不应覆盖该文件。那么我现在看到我的数据库更改没有被应用,因为MSI进程认为用户已经更改了这个文件。
此时我有点难过。我打算使用MSI发行版,但也许我不能。你觉得怎么样?
答案 0 :(得分:0)
如何将.sdf作为嵌入式资源存储在可执行文件中,然后将其解压缩到磁盘上的临时位置(根据需要)并执行更新。
答案 1 :(得分:0)
如果您需要强制安装文件,使用MSI的无版本文件可能有点难以处理。对于某些想法,您可以看到上一个问题How to add a version number to an Access file in a .msi。
该问题包含此博客帖子http://blogs.msdn.com/astebner/archive/2005/08/30/458295.aspx的链接,该帖子提示了我更喜欢处理此问题的方式。添加.sdf文件以成为可执行文件组件的一部分。这样做的缺点是,如果有人删除了.sdf文件,而不是你的可执行文件我不认为应用程序的修复会捕获这个。如果您使用Visual Studio创建MSI文件,那么这可能是一个难以实现的解决方案。我强烈建议您在这种情况下查看WIX。这是一个更好的MSI构建系统。