【问题标题】:Windows service gives error System.IO.DirectoryNotFoundExceptionWindows 服务给出错误 System.IO.DirectoryNotFoundException
【发布时间】:2021-01-07 04:26:54
【问题描述】:

我得到一个错误

> Application: RfidService.exe Framework Version: v4.0.30319
> Description: The process was terminated due to an unhandled exception.
> Exception Info: System.IO.DirectoryNotFoundException    at
> System.IO.__Error.WinIOError(Int32, System.String)    at
> System.IO.FileStream.Init(System.String, System.IO.FileMode,
> System.IO.FileAccess, Int32, Boolean, System.IO.FileShare, Int32,
> System.IO.FileOptions, SECURITY_ATTRIBUTES, System.String, Boolean,
> Boolean, Boolean)    at System.IO.FileStream..ctor(System.String,
> System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, Int32,
> System.IO.FileOptions, System.String, Boolean, Boolean, Boolean)

当我启动我的服务应用程序时,这是在事件查看器中。它可以安装并启动,但在事件查看器中它给了我上面提到的错误,所以它不起作用。唯一需要的文件已经在 bin 中,这就是我在代码中调用它的方式。

using (var streamReader = new StreamReader(Directory.GetCurrentDirectory() + $@"\JsonData\ApplicationSetting.json"))
{
    var jsonString = streamReader.ReadToEnd();
    _applicationSetting = JsonConvert.DeserializeObject<ApplicationSetting>(jsonString);

    if (_applicationSetting != null)
    {
        _pcsConnectionString =
            $@"Data Source={_applicationSetting.PcsSetting.DataSource};Initial Catalog={_applicationSetting.PcsSetting.InitialCatalog};user={_applicationSetting.PcsSetting.User};Password={_applicationSetting.PcsSetting.Password}";
        _lcsConnectionString =
            $@"Data Source={_applicationSetting.LaneSetting.DataSource};Initial Catalog={_applicationSetting.LaneSetting.InitialCatalog};user={_applicationSetting.LaneSetting.User};Password={_applicationSetting.LaneSetting.Password}";
        _serviceConnectionString =
            $@"Data Source={_applicationSetting.ServiceDatabase.DataSource};Initial Catalog={_applicationSetting.ServiceDatabase.InitialCatalog};user={_applicationSetting.ServiceDatabase.User};Password={_applicationSetting.ServiceDatabase.Password}";
        _sendingDelay = _applicationSetting.LcsSetting.SendingDelay;
        _activeQueueTimeInterval = _applicationSetting.LcsSetting.ActiveQueueTimeInterval;
        _messageLoggerEngine = new MessageLoggerEngine(_serviceConnectionString);
    }
}

我可以尝试什么来解决这个问题?

编辑

应用程序exe和json文件所在的文件夹在同一目录下。看这张图片:

【问题讨论】:

  • 异常来自这一行:var streamReader = new StreamReader(Directory.GetCurrentDirectory() + $@"\JsonData\ApplicationSetting.json"),验证这是一个有效的路径。
  • GetCurrentDirectory 是应用程序的当前工作目录,它不一定与您的.exe 的目录相同。
  • @RyanWilson,当我运行我的控制台应用程序时,它运行良好。它可以找到目录和文件。只是当我将它作为服务运行时,它给了我这个错误。
  • @dxiv 请参阅我的编辑。谢谢。
  • @Ibanez1408 记录Directory.GetCurrentDirectory 在将其作为服务运行时返回的路径,并检查它是否返回您认为的内容

标签: c#


【解决方案1】:

你可以使用

using (var streamReader = new System.IO.StreamReader(Directory.GetCurrentDirectory() + $@"\JsonData\ApplicationSetting.json"))

【讨论】:

  • 如何解决问题?
  • 这与 OP 已经在做的有什么不同?
  • 我已经这样做了。有什么区别?
  • @Asad 您发布的行是直接从 OP 的代码复制而来的。这不是答案,也不应该作为答案发布。相反,您可以发布 cmets 以解决其他问题或澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-09
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多