WPF 下配置Settings

本文介绍了一种方法,允许管理员更改.NET 2.0 WinForms应用程序中主EXE配置文件内的userSettings部分的默认值。这种方法避免了直接使用System.Xml进行手动配置文件解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何撰写主EXE的。配置userSettings节?

如何撰写主EXE的。配置userSettings节?

是否有任何NET 2.0支持的API英寸的书面userSettings条的规定, 主要EXE的。config文件

这种情况的出现:

的WinForms 2.0应用程序。

我有一个设置(数据库连接字符串,如果你需要知道)具有用户级别的范围。 这意味着每个用户都有一个用户 。配置文件创建的。净当用户保存的设定值。

对于运行的首次应用的新用户,主要EXE的。配置的应用程序文件包含在用户设置部分的默认值。 这部分是由Visual Studio创建时设置在项目属性设置选项卡上创建。

现在,我希望允许任何计算机管理员用户可以更改新用户的默认值。 只有管理员都会有这个选项,因为普通用户没有权限写入到主EXE的。config文件而已。

我已经找到了如何编写用户设置到用户的。config文件,以及如何编写的appSettings的主要部分。config文件。 但我的Google上搜寻时没有试图找出如何写信给userSettings主要部分。配置

是我唯一的机会不回System.Xml和做手工加载在一个XmlDocument。配置?

#: 629143     c#    .net    config    settings    configuration     User: Sergio Acosta

Comments for #: 629143

我应该为答案后我的解决方案? 由于几乎没有给任何答案之一,我不希望它看起来像我张贴了这个问题后,立即就回答。   #:445015  Sergio Acosta

Answer: 632161

经过研究后,我来到这个方法。 这是有点低的水平,但仍通过的。NET配置API不用不必手动解析。config文件。

static void SaveUserSettingDefault(string clientSectionName, string settingName, object settingValue) 
{
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// find section group
ConfigurationSectionGroup group = config.SectionGroups[@"userSettings"];
if (group == null) return;
// find client section
ClientSettingsSection clientSection = group.Sections[clientSectionName] as ClientSettingsSection;
if (clientSection == null) return;
// find setting element
SettingElement settingElement = null;
foreach (SettingElement s in clientSection.Settings)
{
if (s.Name == settingName)
{
settingElement = s;
break;
}
}
if (settingElement == null) return;
// remove the current value
clientSection.Settings.Remove(settingElement);
// change the value
settingElement.Value.ValueXml.InnerText = settingValue.ToString();
// add the setting
clientSection.Settings.Add(settingElement);
// save changes
config.Save(ConfigurationSaveMode.Full);
}

给定一个包含以下内容。配置:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MyAssembly.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<MyAssembly.Properties.Settings>
<setting name="SqlConnectionString" serializeAs="String">
<value>Server=(local);Database=myDatabase;Integrated Security=true;</value>
</setting>
</MyAssembly.Properties.Settings>
</userSettings>
</configuration>

你可以使用这样说:

if (RunningAsAdmin) // save value in main exe's config file 
{
SaveUserSettingDefault(@"MyAssembly.Properties.Settings", @"SQLConnectionString", theNewConnectionString);
}
else // save setting in user's config file
{
Settings.Default. SQLConnectionString = theNewConnectionString;
Settings.Default.Save();
}

#: 632161     c#    .net    config    settings    configuration     User: Sergio Acosta

Answer: 629490

我认为是 - 手动写入。config文件是唯一的出路。
或者你可以让管理员编辑。配置文件自己。

#: 629490     c#    .net    config    settings    configuration     User: CKoenig

Comments for #: 629490

在这种情况下,管理员是不是计算机精明的人。 这只是一个用户,恰好是在他的机器上运行(例如作为管理员,几乎所有的家庭XP的用户)。 但是,您的建议可能是有用的在不同的情况。 谢谢。   #:444950  Sergio Acosta
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值