【问题标题】:How come my Windows Service cannot access a folder with files in them?为什么我的 Windows 服务无法访问其中包含文件的文件夹?
【发布时间】:2013-06-01 12:43:19
【问题描述】:

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

然后控制台项目将操纵这些变量。我能够成功运行控制台项目,它可以毫无问题地加载文件。这些文件在 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");
}

【问题讨论】:

    标签: c# windows-services buildaction


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 服务帐号是LOCAL SYSTEM。如何允许它读取所述文件夹的权限? SYSTEM 被授予文件夹和文件上的所有内容。
      • 我绝对同意,只是想找出解决方案。
      • @meanbunny,如果你以LOCAL SYSTEM 运行,那么你只是在ReadFiles 的构造函数中抛出异常。发布该代码,或者您甚至可以看到它,并检查事件查看器是否存在几乎可以肯定存在的未处理的 .NET 异常。
      • 问题是因为它在 C:\Windows\System32 中查找
      • 我想我只需要提供完整的路径。我已经用安装项目安装程序安装了这个东西。所以它将它安装到程序文件中。我认为由于 svchost.exe,默认情况下服务希望自动查找 system32 文件夹,因为这是运行服务的目录。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 2012-05-20
      • 2012-10-22
      • 2020-10-11
      • 2012-04-10
      相关资源
      最近更新 更多