保存自定义配置节导致System.UnauthorizedAccessException

时间:2012-09-04 21:20:20

标签: c# configuration sections

我在app.config中尝试使用自定义配置部分时出现以下问题。我使用自定义配置部分来跟踪我想用我的程序备份的文件夹选择,如下所示:

<CustomConfigSection>
    <BackupLocations>
        <clear />
        <add path="C:\Users\Marcel\Documents\" />
    </BackupLocations>
</CustomConfigSection>

现在,每当我保存配置文件时,我都会遇到以下异常:

  

System.Configuration.ConfigurationErrorsException:发生错误   加载配置文件:访问路径C:\ Program Files   (x86)\ Backup Solutions \ uqhuxi1j.tmp被拒绝。   (C:\ Program Files(x86)\ Backup Solutions \   BS.exe.Config)---&gt; System.UnauthorizedAccessException的

我使用的代码是:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
CustomConfigSection section = (CustomConfigSection)config.GetSection("CustomConfigSection");

section.BackupLocations.Add(element);

section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);

以管理员身份登录时此功能正常,只有在PC上配置了多个帐户时才会出现,这意味着它是UAC /权限问题。作为普通用户,我没有该文件夹的正确写入权限。

现在我的问题:

为什么用户设置会保存到AppData,而自定义配置部分试图保存在ApplicationFolder / exe.config中?如何将我的自定义部分保存到AppData配置文件中?

无论权限如何,我都需要能够为每个用户保存数据。那么我可以使用自定义配置部分实现这一点,还是需要不同的方法?我最好也将自定义部分保存到AppData配置文件中。我不想在我的安装程序中使用技巧来调整我的应用程序文件夹的权限以允许它写入。 最重要的是,我不想在启动程序时需要管理员权限!

感谢您的回复,非常感谢。

2 个答案:

答案 0 :(得分:0)

用户范围的设置会保存到AppData,因为用户有权在那里写。用户无权写入Program Files。使用用户范围设置以将其保存到AppData。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/a65txexh(v=vs.100).aspx

答案 1 :(得分:0)

经过一夜好眠,我似乎已经偶然发现了答案。

配置正在AppData目录中保存,以用于版本和用户特定数据。我所做的实际上是直接打开exe.config并且没有做任何关于用户范围设置的事情,更不用说为我程序的当前版本写入AppData配置文件了。当我意识到这一点时,我知道要在谷歌上寻找什么。

我找到了这些文章:

Windows Forms - Creating and Persisting Custom User Settings in C#

Windows Forms - Creating and Persisting Custom User Settings in C# - Part 2

试验和下载该项目的源文件帮助了我很多,并为我提供了我需要的东西。所以基本上我正在为我想做的事情实现错误的功能。

感谢读者,感谢里奇先生让我走上了正确的方向。