SQLite数据库能否跨Windows服务和用户应用程序共享?
在我的产品中,我希望在Windows服务和用户级应用程序之间使用SQLite共享数据。然而,我遇到了一些问题 当用户级应用程序创建SQLite数据库时,两个程序都可以毫无问题地使用它。但是,如果服务创建了SQLite数据库,那么SQLite似乎处理并发性非常糟糕。只要数据库连接处于活动状态,服务进程就会保持写锁。用户级进程的尝试会导致与共享内存相关的错误(我见过SQLite数据库能否跨Windows服务和用户应用程序共享?,windows,sqlite,service,share,Windows,Sqlite,Service,Share,在我的产品中,我希望在Windows服务和用户级应用程序之间使用SQLite共享数据。然而,我遇到了一些问题 当用户级应用程序创建SQLite数据库时,两个程序都可以毫无问题地使用它。但是,如果服务创建了SQLite数据库,那么SQLite似乎处理并发性非常糟糕。只要数据库连接处于活动状态,服务进程就会保持写锁。用户级进程的尝试会导致与共享内存相关的错误(我见过SQLITE\u IOERR\u SHMOPEN和SQLITE\u IOERR\u SHMMAP),而不是正常的SQLITE\u LOC
SQLITE\u IOERR\u SHMOPEN
和SQLITE\u IOERR\u SHMMAP
),而不是正常的SQLITE\u LOCKED
错误。当然,当服务关闭与数据库的连接时,用户级进程再次获得访问权限
该服务以本地\u服务
用户身份运行,SQLite数据库位于共享系统目录(C:\ProgramData\…
)中,并使用预写日志记录(编辑)
我的理论是SQLite无法在用户级进程和服务之间共享内存,因此不可能同时拥有两个由这些进程保持的连接
有人处理过这件事吗?除了努力避免两个进程同时需要数据库之外,还有什么解决方案吗?显然,问题与服务正在创建具有限制权限的文件夹(创建SQLite数据库的文件夹)有关。一旦我们开始为用户组中的任何人创建具有写入权限的文件夹,问题就消失了。显然,问题与服务正在创建具有限制权限的文件夹(其中创建了SQLite数据库)有关。一旦我们开始为用户组中的任何人创建具有写入权限的文件夹,问题就消失了。服务在另一个用户帐户下运行。您是否启用了WAL?是的,我们正在使用预写日志记录。SQLite创建
-shm
文件的directoy的ACL是什么?这是否重要?两个进程都可以使用该文件,只是不能同时使用。(一次只能连接一个数据库。)我应该补充一点,当进程快速释放数据库连接时,10秒的繁忙超时似乎可以很好地处理锁定问题。但我希望,即使进程保持数据库连接超过10秒,也不会出现问题。服务在另一个用户帐户下运行。您是否启用了WAL?是的,我们正在使用预写日志记录。SQLite创建-shm
文件的directoy的ACL是什么?这是否重要?两个进程都可以使用该文件,只是不能同时使用。(一次只能连接一个数据库。)我应该补充一点,当进程快速释放数据库连接时,10秒的繁忙超时似乎可以很好地处理锁定问题。但我希望,即使进程保持数据库连接超过10秒,也不会出现问题。