如果无法改变默认值,它们会有什么用处?修辞问题。
首先,绕过设置系统并直接写入应用程序范围设置文件的最佳方法是什么(下一段中的安全问题)?的XmlReader / XmlWriter的?
IIRC,如果某个应用程序试图写入其Program Files文件夹,Windows Vista和7可以防止这种情况发生。我想我需要调用UAC进行提升,我必须在我的应用程序的“选项”窗口的“确定”按钮上添加该花式盾牌图标,依此类推。链接到快速操作方法?
或者,您可以告诉我,我正在尝试做的是愚蠢的,我应该将我可变的应用程序范围设置存储在其他地方。
答案 0 :(得分:12)
如果将它们更改为“用户”设置,可以在代码中更改它们,当您调用Save()时,它们将保存到当前用户本地设置文件夹中的user.config文件中。
显然,这意味着每个用户可能会有所不同。通常,对于每个用户都相同的全局应用程序设置不会在代码中进行修改,因为一个用户所做的更改将影响其他所有人(因此应用程序设置是只读的)。
如果您不希望它们是用户范围,请查看ConfigurationManager类。这将允许您手动读取和写入.config文件。请记住,c:\ program files \文件夹受到保护,普通用户无法访问它(这将导致UAC提示或vista / win7失败)。仔细考虑如何处理它,并记住对app.config的任何更改都会影响所有用户。
Windows中没有任何位置可以保证所有用户都具有写访问权。
答案 1 :(得分:1)
一个古老的问题,但是我提供此答案是为了帮助任何尝试实现与ConfigurationManager类有关的Simon P Stevens答案的人,因为我不确定如何通过设置来做菜鸟。
第一个认识到的是,我的C#项目中的2个设置文件(由于在Properties下的典型文件位于其中,但是为空,因此很困难)被组合为单个.config并在不同的ConfigurationSections之间进行分割。我认为这就是为什么ConfigurationManager.AppSettings和ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)都始终返回0键的原因。
花费大量的尝试和错误才能意识到大多数ConfigurationManager引用都处理默认的appSettings,并且与设置所使用的applicationSettings不同。
我最终发现了以下内容:
选择正确的ConfigurationSectionGroup / ConfigurationSectionClient,转换为SettingsSection,获取设置,然后设置XML InnerText(例如下面的内容):
// this gets the applicationSettings section (and the inner section 'inoBIBooks.My.MySettings')
Configuration config = WebConfigurationManager.OpenWebConfiguration("/" + targetvdir);
ConfigurationSectionGroup applicationSectionGroup = config.GetSectionGroup("applicationSettings");
ConfigurationSection applicationConfigSection =
applicationSectionGroup.Sections["inoBIBooks.My.MySettings"];
ClientSettingsSection clientSection = (ClientSettingsSection)applicationConfigSection;
// set a value to that specific property
SettingElement applicationSetting = clientSection.Settings.Get("BIDB_Username");
applicationSetting.Value.ValueXml.InnerText = "username";
// without this, saving won't work
applicationConfigSection.SectionInformation.ForceSave = true;
// save
config.Save();
此来源来自:
Access section 'applicationSettings' (not 'appSettings') in config file from setup
和
Save and reload app.config(applicationSettings) at runtime
答案 2 :(得分:0)
请看这里:Best practice to save application settings in a Windows Forms Application
ApplicationSettings类没有 支持将设置保存到 app.config文件。这非常重要 设计,正确运行的应用程序 安全的用户帐户(想想Vista UAC) 没有写入权限 程序的安装文件夹。
你可以用这个来对抗系统 ConfigurationManager类。但是 琐碎的解决方法是进入 设置设计师并更改 将范围设置为用户。如果说 造成困难(比如,设置是 与每个用户相关),你应该 将您的选项功能单独放在一起 程序,所以你可以要求 特权提升提示。或者放弃 使用设置。