【问题标题】:FileNotFoundException not caught when distributing app over network通过网络分发应用程序时未捕获 FileNotFoundException
【发布时间】:2020-07-24 11:51:57
【问题描述】:

我编写了一个小的 WinForms 应用程序,它在启动时从位于 %APPDATA% 的文件中读取设置。如果设置文件不存在或无效,程序将使用硬编码的默认值。一切正常,直到我通过网络共享将我的应用程序复制到另一台 PC 或尝试直接从网络共享启动它。然后程序静默终止,我在事件日志中不断收到FileNotFoundException,尽管我有一个try/catch 块并且文件甚至存在!

感觉就像是某种许可的事情,因为它只发生在应用程序通过网络共享分发时,即使在我将所有内容复制到本地文件夹之后(没有任何来自 Windows 的投诉)。但是,该程序设法为设置文件创建文件夹,然后在尝试读取该文件时崩溃。

当我使用 USB 驱动器将程序复制到另一台 PC 时,一切正常。但这是我不喜欢的解决方法,而且它实际上并不能解决问题。

那么为什么不管文件是否存在它都会抛出FileNotFoundException?为什么异常没有被捕获而是终止程序呢?我该如何解决这个问题?

事件日志显示如下:

Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
  at MyNamespace.Settings.Load()
  at MyNamespace.Program.Main()

这里是一些代码sn-ps:

Program.cs

public static Settings Settings { get; private set; }

static void Main()
{
    Settings = Settings.Load();

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new FormMain());
}

Settings.cs

public static readonly string FileName;

static Settings()
{
    string directoryName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MyProgram");
    FileName = Path.Combine(directoryName, "Settings.json");

    Directory.CreateDirectory(directoryName);
}

public static Settings Load()
{
    try
    {
        string json = File.ReadAllText(FileName);
        return JsonConvert.DeserializeObject<Settings>(json);
    }
    catch
    {
        return new Settings();
    }
}

所有电脑都在 Windows 10 v1909 上运行。我正在使用 VS2019 Enterprise 16.6.5。

【问题讨论】:

  • 您是否尝试过使用Process Monitor 并查找除 Settings.json 之外的其他无法找到的文件?
  • @ThomasWeller 你说得对。 (见我的回答。)
  • 我很高兴这成功了。快乐编程。

标签: c# .net exception


【解决方案1】:

嗯,这有点尴尬,但我想我还是发布了答案。

我只是缺少一个引用的库,在这种情况下是 Newtonsoft.Json.dll,它是第一次使用的,因此试图在 Settings.Load() 期间加载。这导致 FileNotFoundException 被抛出而不被捕获 - 因为不是我的代码抛出它。

在使用网络共享分发时,我只是出于某种原因忘记了包含此文件。在USB驱动器上,我没有。感谢 Thomas Weller,他指出它可能是我的 Settings.json 以外的文件,我只是没想到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多