Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite数据库能否跨Windows服务和用户应用程序共享?_Windows_Sqlite_Service_Share - Fatal编程技术网

SQLite数据库能否跨Windows服务和用户应用程序共享?

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

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

当用户级应用程序创建SQLite数据库时,两个程序都可以毫无问题地使用它。但是,如果服务创建了SQLite数据库,那么SQLite似乎处理并发性非常糟糕。只要数据库连接处于活动状态,服务进程就会保持写锁。用户级进程的尝试会导致与共享内存相关的错误(我见过
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秒,也不会出现问题。