2011-06-03 209 views
1

因此,我创建了一个简单的WPF应用程序,该应用程序允许用户将字符串插入到SQLite数据库(.S3DB文件)中。用户还可以从数据库中选择一个字符串,并从数据库中删除字符串...非常简单的应用程序。将SQLite与Windows应用程序集成

我想分发这个简单的应用程序,所以我通过创建一个新项目并使用VS2010上的安装向导为应用程序创建了setup.exe文件。当用户安装该应用程序,它创建在Program Files目录下的“TestDatabase”文件夹,并将这两个文件与.exe文件一起:

  1. System.Data.SQLite.DLL文件(因为它是一个检测依赖)
  2. TestDatabase.s3db文件(测试数据库供用户使用)

当我我开发的计算机上安装它...一切正常。但是,当我将它安装在另一台计算机上时,它会在我尝试从应用程序(存储在C:\ Program Files(x86)\ TestDatabase \ TestDatabase.s3db)中打开数据库时崩溃。

我想知道是否有人可以帮助解决这个问题?谢谢。

回答

1

我意识到,之所以它崩溃,当我打开数据库是因为我没有安装在安装程序包我正在测试的新电脑。安装程序包包含所有运行时组件和依赖项。该安装包可以在这里找到:

http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

此外,ravenspoint,RandomEngy和bryanbcook ......你们是对的。从Program Files文件夹读取/写入数据库是一个坏主意,因为从Program Files文件夹访问数据库时可能会发生权限问题。所以我将数据库保存在AppData文件夹中,在该文件夹中可以读取/写入数据库而没有任何许可问题。

0

可能是一个权限问题。您可能想为此使用独立存储。

也可能是您的项目正在使用来自GAC的程序集。确保你的装配对你的项目是本地的。

4

除非以管理员模式运行,否则不能修改Program Files目录中的文件。您应该将.s3db文件部署到%appdata%之内的文件夹中。

1

你一定想解决方程的权限部分,但是你也可能遇到我在周末遇到的DbProviderFactories问题,同时想出如何使用sqlite.org的最新二进制文件。您可以阅读details on my blog post但简短的回答是,你需要一个配置文件条目或等效的代码是这样的:

<system.data> 
    <DbProviderFactories> 
    <remove invariant="System.Data.SQLite" /> 
    <add name="SQLite Data Provider" 
     invariant="System.Data.SQLite" 
     description=".Net Framework Data Provider for SQLite" 
     type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> 
    </DbProviderFactories> 
</system.data> 

而你需要确保你设置了“复制本地”在汇编等于真参考,以便SQLite程序集将包含在您的\ bin和安装项目中。

0

问题是您的用户没有写入Program Files文件夹的权限。快速的解决办法是安装测试数据库文件中

C:/Program Data/<your company name>/<your application name>/ 

但是,不使用安装程序数据库文件拖放到某些特定文件夹是一个好主意。当您想要将已更新的应用程序分发给安装了先前版本的用户时,最终会出现问题。最好在应用程序中编写代码来查找数据库,并在未找到的情况下创建一个新的代码。这样,更新后的应用程序可以使用由以前的版本生成的数据库,因此可能代表大量的用户投资。

有关如何详细数据库驱动的应用程序的升级处理更多详细信息,请参阅How to manage desktop file database versions?

相关问题