SQLite数据库文件的位置和环境

时间:2013-08-23 12:25:11

标签: c# database sqlite installshield appdata

我已经为Windows开发了一个小软件几周,并且在尝试为其安装适当的安装程序时遇到了问题。 我得到了特殊要求,数据库文件必须位于程序所在的同一文件夹中,因此用户可以不时地进行自己的备份。

当我安装它时(使用Visual Studio 2012和InstallShield Limited Edition项目),它可以在我的主计算机( W7 64位),我的笔记本电脑( W8 64位)和我的哥们笔记本电脑( W8 32位)就好了。

我的主计算机应该运行程序,它使用来自程序数据库文件夹( C:/ Program Files(x86)/程序名称/程序名称/数据库)的数据库文件,并且不会创建额外的db文件但我的笔记本电脑和我的朋友笔记本电脑创建文件夹 " C:/ Users / User / AppData / Local / VirtualStore / Program Files(x86)/ Program Name / Program 名称/数据库"从那里使用数据库。

另外我注意到程序在我运行W7 32位的其他测试计算机上启动时崩溃了,我确保安装了.Net Framework。

连接字符串如下: sqLiteConnection1.ConnectionString ="数据源=。\\数据库\\ db&#34 ;; 程序的平台目标设置为任何CPU,如果有任何帮助,它使用.Net Framework 4.5。

有什么想法导致这种情况以及如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

数据库文件必须位于程序所在的同一文件夹中,以便用户可以进行自己的备份

危险威尔罗宾逊!非管理员用户无法修改共享或Program Files文件夹中的文件。您强制用户以管理员身份运行,或更改Program Files文件夹,以便非管理员可以对其进行修改;两者都是严重的安全漏洞。

如果将数据库安装到Programs文件夹,则数据库是安装的一部分,而不是用户数据。这意味着修复或卸载应用程序将删除所有用户数据。用户不喜欢这样。

您的应用程序应将应用程序数据库复制到Environment.SpecialFolder.ApplicationData这样的用户文件夹,并保存所有更改。所有用户都可以修改和备份自己文件夹中的数据,不需要安全漏洞。此外,当有人修理或卸载应用程序时,所有用户都可以保留他们的数据。

答案 1 :(得分:0)

您的连接字符串正在使用当前目录(.)。

使用Assembly.GetExecutingAssembly().Location动态创建。