为什么我的Windows服务不能访问包含文件的文件夹?

本文关键字:文件 文件夹 包含 访问 我的 Windows 服务 不能 为什么 | 更新日期: 2023-09-27 18:17:10

我已经设置了一个控制台、库和服务项目。Library项目加载文件夹中的文件,并将文本存储在变量中。

控制台项目然后将操作这些变量。我能够成功地运行控制台项目,它加载文件没有问题。这些文件在DLL中设置为"始终复制",并指定为"构建操作的内容"。

当我试图在服务中运行完全相同的代码时。

File.ReadAllText(@"MyFolder'SomeFile.txt");

抛出以下异常。

The type initializer for 'MyLibrary.Data.ReadFiles' threw an exception.

我使用Setup Project类型来创建安装程序。服务安装完成后,服务的"应用程序文件夹"中不仅存在文件,还存在文件夹"MyFolder"。还有什么可能导致服务无法读取这些文件的问题?

编辑1

public class ReadFiles {
    public static string DataFile = File.ReadAllText(@"MyFolder'SomeFile.txt");
}

为什么我的Windows服务不能访问包含文件的文件夹?

运行Windows服务的服务帐户没有权限读取您试图访问的位置。您看到的错误与您所展示的代码可能存在于类型ReadFiles的构造中有关。

在运行node js应用程序的一个windows服务中面临类似的问题,用于发送电子邮件。当我们从同一个目录运行时,它运行得很好,但是与windows服务运行相同的应用程序出现了问题,无法发送电子邮件。@meanbunny的评论确实有帮助,所以把它作为一个答案。

Windows服务不能访问在代码中作为相对路径的目录/文件,最好使用绝对路径,或者像@Mike在他的评论中提到的更灵活地为每个服务使用app.config