【问题标题】:How to restore Configuration Settings when they fail to initialize初始化失败时如何恢复配置设置
【发布时间】:2015-01-23 10:17:20
【问题描述】:

我的程序有一些应用程序设置和一些用户设置。在某些机器上,我的用户设置配置文件损坏并停止我的程序加载。然后我登录到机器并删除存储在的 UserConfig 目录 %USERPROFILE%\Appdata\Local\MyApp

当我的文件损坏时,抛出的错误是 Configuration Settings Failed To Initialize 所以我想知道这是否发生在我的程序中是否有办法删除损坏的文件并重置配置。

到目前为止我有:

try
{
     var prop1= Settings.Default.prop1;
}
catch (Exception ex)
{
    var userSettingsLocation =
      Path.Combine(Environment.ExpandEnvironmentVariables(
        "%USERPROFILE%"), "AppData","Local", "MyApp");
    if (Directory.Exists(userSettingsLocation))
    {
      DeleteDirectory(userSettingsLocation); // This is a reccursive
                                             // delete method
      // I need to reload settings
    }
}

这会很好地删除文件,但如果我尝试再次使用例如Settings.Reset(); 读取我的设置,我仍然会收到相同的错误。删除损坏的文件后,我需要以某种方式重置配置设置。这可能吗?

【问题讨论】:

    标签: c# configuration


    【解决方案1】:

    如果其他人想知道,这就是诀窍:

    try
    {
         var prop1= Settings.Default.prop1;
    }
    catch (Exception ex)
    {
        var userSettingsLocation =
          Path.Combine(Environment.ExpandEnvironmentVariables(
            "%USERPROFILE%"), "AppData","Local", "MyApp");
        if (Directory.Exists(userSettingsLocation))
        {
             if (ex.InnerException is System.Configuration.ConfigurationException)
             {
                 var settingsFile = (ex.InnerException as ConfigurationException).Filename;
                 File.Delete(settingsFile);
                 System.Windows.Forms.Application.Restart();
             }
        }
    }
    

    【讨论】:

      【解决方案2】:

      编辑:经过一些试验,我认为您需要在删除错误的配置文件后重新启动应用程序。这里是另一个 SO 线程:C# - User Settings broken

      最后一个答案基本上是您可以使用的代码。


      其实我认为你必须在删除文件后调用Settings.Reset

      顺便说一下,您应该使用异常详细信息来获取导致问题的配置文件名:

      catch(Exception ex) 
      {
          if(ex.InnerException is ConfigurationErrorsException)
          {
      
              var settingsFile = (e.InnerException as ConfigurationErrorsException).Filename;
              /* ....Your code... */
      
          }
      }
      

      字符串文件名 (()e.InnerException).Filename;

      【讨论】:

      • 调用Settings.Reset() 可悲地又抛出settings cannot be initialized exception
      猜你喜欢
      • 2016-12-25
      • 2012-10-05
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      相关资源
      最近更新 更多