0

几周以来,我已经为 Windows 开发了一个小软件,但在尝试为其制作正确的安装程序时遇到了问题。我收到了特别的要求,即数据库文件必须位于程序所在的同一文件夹中,以便用户可以不时地进行自己的备份。

当我安装它(使用 Visual Studio 2012 和 InstallShield Limited Edition 项目)时,它可以在我的主计算机(W7 64 位)、我的笔记本电脑(W8 64 位)和我的好友笔记本电脑(W8 32 位)上正常工作。

我的主计算机按应有的方式运行程序,它使用程序数据库 - 文件夹(C:/Program Files (x86)/Program Name/Program Name/Database)中的数据库文件,并且不创建额外的 db 文件,但我的笔记本电脑和我的朋友笔记本电脑创建文件夹到“ C:/Users/User/AppData/Local/VirtualStore/Program Files (x86)/Program Name/Program Name/Database ”并从那里使用数据库。

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

连接字符串如下:sqLiteConnection1.ConnectionString = "data source=.\\Database\\db"; 程序的平台目标设置为任何 CPU,如果有帮助,它会使用 .Net Framework 4.5。

任何想法是什么导致了这个以及我如何解决它?

4

2 回答 2

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

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

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

您的应用程序应该将应用程序数据库复制到一个用户文件夹,例如Environment.SpecialFolder.ApplicationData并将所有更改保存在那里。所有用户都可以从自己的文件夹中修改和备份数据,无需安全漏洞。此外,当有人修复或卸载应用程序时,所有用户都可以保留他们的数据。

于 2013-08-23T17:19:11.513 回答
0

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

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

于 2013-08-23T14:58:05.593 回答