SQLite数据库可以在Windows服务和用户应用程序之间共享吗?

时间:2013-03-14 17:55:24

标签: windows sqlite service share

在我的产品中,我想在Windows服务和用户级应用程序之间使用SQLite共享数据。但是,我遇到了一些问题。

当用户级应用程序创建SQLite数据库时,两个程序都可以毫无问题地使用它。但是如果服务创建SQLite数据库,那么SQLite似乎非常糟糕地处理并发。只要数据库连接处于活动状态,服务进程就会保持写锁定。用户级进程尝试导致与共享内存相关的错误(我看到SQLITE_IOERR_SHMOPENSQLITE_IOERR_SHMMAP)而不是正常的SQLITE_LOCKED错误。当然,当服务关闭与数据库的连接时,用户级进程将再次获得访问权限。

该服务作为LOCAL_SERVICE用户运行,SQLite数据库位于共享系统目录(C:\ProgramData\...中,并使用预写日志记录(编辑)。< / p>

我的理论是SQLite无法在用户级进程和服务之间共享内存,因此无法在这些进程中保持两个同时连接。

有没人处理过这件事?除了努力让两个进程同时不需要数据库之外,还有其他解决方案吗?

1 个答案:

答案 0 :(得分:1)

显然,问题与服务正在创建具有限制权限的文件夹(在其中创建SQLite数据库)这一事实有关。一旦我们开始为 Users 组中的任何人创建具有写权限的文件夹,问题就会消失。