C#编写的windows服务访问共享出来的sqlite数据库

White_98K 2020-01-13 10:06:52
C#编写的windows服务启动后连接不了共享出来的sqlite数据库,提示没有找到数据库。。。但是console程序一点问题没有,这是服务权限问题吗?
...全文
979 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_29338811 2021-04-10
  • 打赏
  • 举报
回复
你好楼主。我也遇到这个问题。我是这样解决的: 因为Windows服务的工作目录是C:\Windows\System32。所以在Windows服务运行的时候。它会在C:\Windows\System32找你的app.config配置文件。显然你的app.config不在C:\Windows\System32目录里边。所以即使你的app.config里面配置了正确的Sqlite数据库的路径。由于在工作目录找不到这个文件。所以是读取不到你的配置的。 你可以AppDomain.CurrentDomain.BaseDirectory获取程序的基目录。然后在程序中写代码指定读取程序的基目录里面的app.config配置文件的数据库路径配置解决这个问题。 希望可以帮到你。
卖水果的net 2020-01-14
  • 打赏
  • 举报
回复
提示没有找到数据库 打印一下路径,看看是否真的存在。 另外,网络路径,在服务下不一定有网络权限,在console 可以找到,那是你已经登录到了windows,并且了有了网络权限。
luj_1768 2020-01-14
  • 打赏
  • 举报
回复
控制台应用的打开方式是独占一个服务端子,对于服务方软件就是占用一个连接。你用服务连接,其数据占用程度是一个连接池,轻量级数据源肯定不允许这样。接入数据库,一般是以客户机身份,你现在使用服务器身份、到底是你服务它还是它服务你?
道亦无名 2020-01-14
  • 打赏
  • 举报
回复
数据库嘛 简单
github_36000833 2020-01-13
  • 打赏
  • 举报
回复
文不对题,但是, 使用网络共享上的SQLite文件,非常可能造成日后的数据灾难。
White_98K 2020-01-13
  • 打赏
  • 举报
回复
自己顶一顶,期盼高手来解决问题。
9点0频道 2020-01-13
  • 打赏
  • 举报
回复
怕有人关闭,就做成一个别人不可以随意关闭的
ying1234 2020-01-13
  • 打赏
  • 举报
回复
引用 17 楼 White_98K 的回复:
[quote=引用 16 楼 datafansbj 的回复:]
不建议这样做,会产生很多问题。服务先于桌面登录启动,此时网络连接尚未建立,无法访问网络上的其他文件。必须先手动登录到桌面,然后再启动服务(服务必须以桌面帐户身份启动),balabala......
为什么必须用服务呢?用桌面程序不行吗?

怕有人不小心把程序关了,所以考虑用服务的呢。[/quote]
那可以考虑用windows的计划任务自动启用exe,在后台运行的。
White_98K 2020-01-13
  • 打赏
  • 举报
回复
引用 16 楼 datafansbj 的回复:
不建议这样做,会产生很多问题。服务先于桌面登录启动,此时网络连接尚未建立,无法访问网络上的其他文件。必须先手动登录到桌面,然后再启动服务(服务必须以桌面帐户身份启动),balabala...... 为什么必须用服务呢?用桌面程序不行吗?
怕有人不小心把程序关了,所以考虑用服务的呢。
datafansbj 2020-01-13
  • 打赏
  • 举报
回复
不建议这样做,会产生很多问题。服务先于桌面登录启动,此时网络连接尚未建立,无法访问网络上的其他文件。必须先手动登录到桌面,然后再启动服务(服务必须以桌面帐户身份启动),balabala......
为什么必须用服务呢?用桌面程序不行吗?
White_98K 2020-01-13
  • 打赏
  • 举报
回复
引用 14 楼 datafansbj 的回复:
不建议这样设计,Windows 服务运行在 system 帐户,与你的桌面登录帐户不是同一个。你使用共享方式能访问网络文件,仅仅表示你可以使用当前桌面帐户访问,不代表 system 帐户能访问。服务是系统启动后就可以自动运行的(不需要登录桌面),不像桌面程序必须登录才能运行(console命令行属于桌面程序)。
按照这个思路来看的话,只需要设置当前用户去访问就行了,对吧。
datafansbj 2020-01-13
  • 打赏
  • 举报
回复
不建议这样设计,Windows 服务运行在 system 帐户,与你的桌面登录帐户不是同一个。你使用共享方式能访问网络文件,仅仅表示你可以使用当前桌面帐户访问,不代表 system 帐户能访问。服务是系统启动后就可以自动运行的(不需要登录桌面),不像桌面程序必须登录才能运行(console命令行属于桌面程序)。
White_98K 2020-01-13
  • 打赏
  • 举报
回复
引用 12 楼 ying1234 的回复:
[quote=引用 10 楼 White_98K 的回复:] 你们说路径不对的,告诉我,我这路径哪里不对了,要咋写。。。一个是其他服务器共享出来的,我本机能正常打开。一个是我配置的路径。同样的路径,console可以运行,但是安装成服务就报错。情况就是这样了。
这么看,是权限的问题了, https://www.jianshu.com/p/8417cea3a122 这文章你看一下,有帮助。[/quote] 感谢,先看看文章。
ying1234 2020-01-13
  • 打赏
  • 举报
回复
引用 10 楼 White_98K 的回复:

你们说路径不对的,告诉我,我这路径哪里不对了,要咋写。。。一个是其他服务器共享出来的,我本机能正常打开。一个是我配置的路径。同样的路径,console可以运行,但是安装成服务就报错。情况就是这样了。


这么看,是权限的问题了,
https://www.jianshu.com/p/8417cea3a122
这文章你看一下,有帮助。
White_98K 2020-01-13
  • 打赏
  • 举报
回复
引用 9 楼 github_36000833 的回复:
[quote=引用 7 楼 White_98K 的回复:] [quote=引用 6 楼 ying1234 的回复:] 提示没有找到数据库。。。都出这个提示了,那就是你放的路径不对,而不是权限问题,如果是权限问题,怎么会是这样的提示呢?
路径放不对,怎么解释console程序完美运行呢?而服务就报这个错呢?这个路径是其他服务器共享出来的文件夹(前提)[/quote] 你看到的网络共享是当前登录用户的网络共享。服务程序一般运行在System账号下,不同于当前登录的交互用户。 当前用户运行的console,可以使用当前用户的网络共享。不等于System账号就能使用该网络共享。[/quote] 服务属性,设置了当前administrator登录的,还是一样的错。。。唉。。。
White_98K 2020-01-13
  • 打赏
  • 举报
回复
你们说路径不对的,告诉我,我这路径哪里不对了,要咋写。。。一个是其他服务器共享出来的,我本机能正常打开。一个是我配置的路径。同样的路径,console可以运行,但是安装成服务就报错。情况就是这样了。
github_36000833 2020-01-13
  • 打赏
  • 举报
回复
引用 7 楼 White_98K 的回复:
[quote=引用 6 楼 ying1234 的回复:]
提示没有找到数据库。。。都出这个提示了,那就是你放的路径不对,而不是权限问题,如果是权限问题,怎么会是这样的提示呢?

路径放不对,怎么解释console程序完美运行呢?而服务就报这个错呢?这个路径是其他服务器共享出来的文件夹(前提)[/quote]

你看到的网络共享是当前登录用户的网络共享。服务程序一般运行在System账号下,不同于当前登录的交互用户。
当前用户运行的console,可以使用当前用户的网络共享。不等于System账号就能使用该网络共享。
groveer 2020-01-13
  • 打赏
  • 举报
回复
仔细调试你的服务程序 打断点进一下路径看看
White_98K 2020-01-13
  • 打赏
  • 举报
回复
引用 6 楼 ying1234 的回复:
提示没有找到数据库。。。都出这个提示了,那就是你放的路径不对,而不是权限问题,如果是权限问题,怎么会是这样的提示呢?
路径放不对,怎么解释console程序完美运行呢?而服务就报这个错呢?这个路径是其他服务器共享出来的文件夹(前提)
ying1234 2020-01-13
  • 打赏
  • 举报
回复
提示没有找到数据库。。。都出这个提示了,那就是你放的路径不对,而不是权限问题,如果是权限问题,怎么会是这样的提示呢?
加载更多回复(3)

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧