繁体   English   中英

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

[英]How come my Windows Service cannot access a folder with files in them?

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

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

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

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

它抛出以下异常。

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

我正在使用安装项目类型来创建安装程序。 服务安装后,文件夹MyFolder确实存在于服务的应用程序文件夹中,以及文件中。 还有什么可能导致我的服务无法读取这些文件的问题?

编辑 1

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

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

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

如果在代码中将目录/文件作为相对路径提及,则 Windows 服务无法访问目录/文件,最好使用绝对路径或更灵活,如@Mike 在他的评论中提到的,为每个服务使用 app.config。

如果网络文件与本地系统帐户共享,则您需要以“本地系统帐户”身份登录,

作为“本地系统帐户”运行服务的优势在于该服务可以完全不受限制地访问本地资源。 但是也有一些缺点,因为要小心安装未经授权的服务,因为服务可以完全不受限制地访问。 而且如果服务有一些错误,则可能会导致性能问题。

以下链接了解更多信息https://techdirectarchive.com/2019/07/31/merits-and-demerits-of-local-system-account-and-service-logon-account/

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM