2009-11-06 38 views
12

它们有什么用处,如果它们无法改变其默认值呢?修辞问题。如何避免应用程序范围设置为只读?

首先,绕过设置系统并直接写入应用程序范围设置文件(下一段中的安全问题)的最佳方法是什么?的XmlReader/XmlWriter的?

IIRC,如果应用程序试图写入其Program Files文件夹,Windows Vista和7会做一些魔术来防止这种情况发生。我想我需要调用UAC来升级,并且我必须在应用程序的“选项”窗口的“确定”按钮上放置那个花哨的盾牌图标,等等。链接到一个快速的方法?

或者,您可能会告诉我,我正在尝试做的事很愚蠢,我应该将我可更改的应用程序范围设置存储在其他位置。

回答

10

如果将它们更改为“用户”设置,则可以在代码中更改它们,并且在调用Save()时,它们将保存到当前用户本地设置文件夹中的user.config文件。

很明显,这意味着它们对于每个用户都可能不同。通常,对于每个用户而言相同的全局应用程序设置不会在代码中进行修改,因为一位用户所做的更改会影响其他人(因此应用程序设置为只读)。

如果您不希望它们成为用户范围,请参阅ConfigurationManager类。这将允许您手动读取和写入.config文件。请记住,c:\ program files \文件夹受到保护,普通用户无法访问它(这会导致UAC提示或vista/win7失败)。仔细考虑你将如何处理它,并记住任何对app.config的更改都会影响所有用户。

在Windows中没有所有用户都有写入权限的位置。

+2

但这正是我想要的!用户A修改某些内容,而用户B不必重复该修改。 – CannibalSmith

+9

更奇怪的是,更多的人不需要这个功能。当然很多应用程序都具有程序员想要构建友好UI的全局设置。 –

+1

@Ben - 如果你确实想将设置直接保存到全局,你可以使用[ConfigurationManager](http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx)类。 exe.config文件。很明显,如果该文件位于c:\ programfiles \中,您的用户将需要相应的管理权限。首先像这样打开配置:var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);然后像这样添加新的设置:config.AppSettings.Settings.Add(“key”,“value”); (或者你可以创建自定义配置部分)不要忘记打电话保存。 –

0

看吧:Best practice to save application settings in a Windows Forms Application

的的applicationSettings类不 支持设置保存到 app.config文件。这是非常多的 设计,与适当的 受保护的用户帐户(认为Vista的UAC) 运行的应用程序没有写入 程序的安装文件夹。

您可以使用ConfigurationManager类与 对战。但 微不足道的解决方法是进入 设置设计器并将 设置的范围更改为用户。如果该 造成困难(例如,设置为 与每个用户相关),则应该将 将您的选项功能放入单独的 程序中,以便您可以要求提供 权限提升提示。或者使用设置放弃 。

相关问题