gpt4 book ai didi

c# - 如何写入主 exe .config 用户设置部分?

转载 作者:太空狗 更新时间:2023-10-29 21:11:33 24 4
gpt4 key购买 nike

.NET 2.0 中是否有任何支持的 API 用于写入主 exe 的 .config 文件userSettings部分?

场景是:

Winforms 2.0 应用程序。

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

对于首次运行该应用程序的新用户,该应用程序的主 exe .config 文件在用户设置部分包含一个默认值。当在项目属性的“设置”选项卡中创 build 置时,此部分由 visual studio 创建。

现在,我想允许计算机中的任何管理员用户能够更改新用户的默认值。只有管​​理员才有此选项,因为普通用户无权写入主 exe 的 .config 文件。

我找到了如何将用户设置写入用户的 .config 文件,以及如何写入主 .config 文件的 appSettings 部分。但是当我试图找出如何写入主 .config 的 userSettings 部分时,我的谷歌搜索失败了

我唯一的机会是失败返回到 System.Xml 并在 XmlDocument 中手动加载 .config 吗?

最佳答案

经过一番研究,我想出了这个解决方案。它的级别有点低,但仍然通过 .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);
}

给定一个包含以下内容的 .config:

<?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();
}

关于c# - 如何写入主 exe .config 用户设置部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/629143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com