1

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

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

该服务以LOCAL_SERVICE用户身份运行,SQLite 数据库位于共享系统目录 ( C:\ProgramData\...)中并使用预写日志记录 (编辑)

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

有没有人处理过这个?除了非常努力地防止两个进程同时需要数据库之外,还有其他解决方案吗?

4

1 回答 1

1

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

于 2013-12-23T19:16:51.127 回答