Windows服务看不到文件
本文关键字:文件 看不到 服务 Windows | 更新日期: 2023-09-27 17:51:05
我已经创建了一个Windows服务来为我管理一些文件。出于调试的目的,我还编写了一个控制台入口点,因此实际服务的所有代码都是与windows服务分开的一个类。我正在使用SQLite DB与流畅的NHibernate来存储设置等。
当我运行控制台模式时,它工作得很好,但当我试图启动进程时,它没有。我已经对我的进程做了一个调试,发现当NHibernate试图创建会话时,它看不到db文件,即使它确实存在。
我已经将该进程设置为以管理员身份运行,并且还尝试将其作为启用了"Allow access to desktop
"的本地系统帐户运行,但它仍然不会拾取DB文件。这意味着NHibernate不能加载文件,所以它创建一个新的文件,当我的服务试图从DB加载数据时,它失败了,因为它加载了一个空白的DB文件。
所以事实证明,即使我的进程文件在一个特定的文件夹中,它是在Windows目录的上下文中运行的,我已经添加了以下代码,现在它工作得很好:
System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
可能是文件权限问题。检查业务执行用户是否可以读写db文件
也可以是工作目录问题:Windows服务运行在哪个目录?
您可以使用绝对路径来查找文件。
你可以在启动服务的早期使用SetCurrentDirectory(),将从服务可执行文件的路径中提取的内容传递给它。另一方面,通常修改的数据不应该在服务的安装目录中,而应该在ProgramData文件夹下。
app.config仍然像往常一样加载,所以它可以用来配置任何安装依赖路径。