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

时间:2013-06-05 17:33:21

标签: c# windows-services buildaction

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

然后控制台项目将操纵这些变量。我能够成功运行Console项目并加载文件没有问题。这些文件在DLL中设置为Copy Always,并被指定为Build Action的内容。

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

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");
}

2 个答案:

答案 0 :(得分:1)

您正在运行Windows服务的服务帐户,无权从您尝试访问的位置进行阅读。您看到的错误与您显示的代码可能存在于ReadFiles类型的构造中这一事实有关。

答案 1 :(得分:0)

在运行节点js应用程序,发送电子邮件的Windows服务之一中遇到了类似的问题。 当我们从同一目录运行时,它运行良好,但是与Windows服务运行相同的应用程序时出现问题,无法发送电子邮件。 @meanbunny的评论确实有帮助,因此将其添加为答案。

如果在代码中提到它们是相对路径,则Windows服务将无法访问目录/文件,最好使用绝对路径,或者如注释中提到的@Mike那样更灵活,以便对每个文件使用app.config服务。