C# 应用程序可以';windows启动后找不到设置或映像文件

C# 应用程序可以';windows启动后找不到设置或映像文件,c#,windows,settings,boot,C#,Windows,Settings,Boot,我有一个在windows启动后启动的应用程序。这工作得很好,但是应用程序似乎找不到必要的csv文件和设置或必要的资源,从而导致崩溃。然而,若我在登录到我的Windows帐户后手动打开该应用程序,它就可以正常工作 我试图检查csv文件是否真的存在,但如上所述,应用程序找不到它。由于csv文件包含一些设置和语言数据,如果找不到该文件,应用程序将无法运行 在读取csv文件之前,我通过执行以下操作检查该文件是否存在: try { string langFile = Path.C

我有一个在windows启动后启动的应用程序。这工作得很好,但是应用程序似乎找不到必要的csv文件和设置或必要的资源,从而导致崩溃。然而,若我在登录到我的Windows帐户后手动打开该应用程序,它就可以正常工作

我试图检查csv文件是否真的存在,但如上所述,应用程序找不到它。由于csv文件包含一些设置和语言数据,如果找不到该文件,应用程序将无法运行

在读取csv文件之前,我通过执行以下操作检查该文件是否存在:

     try {
        string langFile = Path.Combine(Settings.Default.WorkingDirectory, "languageSupport.csv"); //Get language file
        // Read out the file
    } catch {
        MessageBox.Show("Could not load settings data!");
        Console.WriteLine("Error occured: " + e.Message);
    }
此外,我认为重要的是不要注意以下几点:此错误仅在计算机关闭至少几个小时后发生。重新启动或关闭电脑,几分钟后再打开电脑,都不会显示错误


我能做些什么来改进这一点?为什么它会在自动引导时崩溃,而不是在我手动引导时崩溃?

这是因为当它自动加载时,工作目录与从
.exe
手动打开时不同,请尝试使用
AppDomain.CurrentDomain.BaseDirectory
确保路径与应用程序相关,您还可以使用它指定.csv文件路径,假设该文件与您的应用程序位于同一目录中:

try {
        string langFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "languageSupport.csv"); //Get language file
        // Read out the file
    } catch {
        MessageBox.Show("Could not load settings data!");
        Console.WriteLine("Error occured: " + e.Message);
    }

每当应用程序运行时,记录完整路径。所以你可以看到它实际上在读什么。如果路径正确,您的文件可能缺少运行应用程序的任何用户帐户的权限。@Vlam我将尝试这样做。但有一个问题是,如果同一个用户试图手动打开应用程序或在用户登录其帐户后打开应用程序,该文件怎么会缺少权限?我认为这个解决方案不好。是的,它可能会工作,但是如果用户将应用程序安装在不同的文件夹中呢?这就是我在设置文件中设置WorkingDirectory的原因,这样用户就可以在其计算机上的任何位置安装应用程序device@Infiltrator尝试更新的答案,希望对你有帮助。汉克斯,我会尝试一下。也许还需要注意以下几点:此错误仅在计算机关闭至少几个小时后才会发生。重新启动或关闭电脑并在几分钟后重新启动不会给我错误。好的,然后尝试检查这是否为您提供了一致的行为或在第一个晚上后正常工作。将对此进行进一步测试,但感谢您提供此解决方案!