3

我创建了一个Windows 服务来为我管理一些文件。出于调试目的,我还编写了一个控制台入口点,因此我的所有实际服务代码都是一个独立于 Windows 服务的类。我正在使用带有流利NHibernate的SQLite DB来存储设置等。

当我运行控制台模式时,它运行良好,但在尝试启动进程时却没有。我已经在我的进程开始时进行了调试,发现当 NHibernate 尝试创建会话时,即使它确实存在,它也看不到 db 文件。

我已经将该进程设置为以管理员身份运行,并且还尝试将其作为Allow access to desktop启用“”的本地系统帐户运行,但它仍然无法获取数据库文件。这意味着NHibernate无法加载该文件,因此它会创建一个新文件,并且当我的服务尝试从数据库加载数据时,它会失败,因为它加载了一个空白数据库文件。

4

2 回答 2

2

所以事实证明,即使我的进程文件在特定文件夹中,它在 Windows 目录的上下文中运行,我已经添加了以下代码,现在它可以完美运行:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
于 2013-01-10T07:13:18.247 回答
1

可能是文件权限问题。检查服务执行用户是否可以读/写 db 文件。

或者,它可能是工作目录问题: Windows 服务在哪个目录中运行?

您可以使用绝对路径来查找文件。

您可以在启动服务时尽早使用 SetCurrentDirectory(),并将从服务可执行文件的路径中提取的内容传递给它。另一方面,通常修改的数据不应该在服务的安装目录中,而是在例如 ProgramData 文件夹下。

app.config 仍照常加载,因此可用于根据需要配置任何安装相关路径。

于 2013-01-08T20:03:59.760 回答