gpt4 book ai didi

c# - ConfigurationManager 没有按预期保存值

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:59 28 4
gpt4 key购买 nike

我的程序有如下配置文件

<appSettings>
<add key="ShowDebugWindow" value="false"/>
<add key="AppDataSubFolder" value="DLI\Keymon"/>
<add key="KeymonSettingsFile" value="Keymon.xml"/>
<add key="KeymonSettingsFileExtension" value="XML"/>
</appSettings>

通过深入挖掘,我发现了如何 A) 检查该 key 是否存在 B) 在需要时添加一个新 key 。由于我的程序在程序文件中,我发现为了避免将配置文件保存到虚拟存储,我必须让我的程序以管理员身份运行。这是不允许的,所以我决定制作一个控制台项目来为我解决这个问题。很简单。

所以我这样做了

    public static int Main(string[] args)
{
FixConfigFile();
return 0;
}
private static void FixConfigFile()
{//warning if the program is writing to a protect area, the config file might be redirected to virtual store
UpdateSettingIfMissing("ShowDebugWindow", "false");
UpdateSettingIfMissing("AppDataSubFolder", "DLI\\Keymon");
UpdateSettingIfMissing("KeymonSettingsFile", "Keymon.xml");
UpdateSettingIfMissing("KeymonSettingsFileExtension", "XML");
UpdateSettingIfMissing("LeftButton1", "");
UpdateSettingIfMissing("RightButton1", "");
UpdateSettingIfMissing("FunctionButton1", "");
UpdateSettingIfMissing("FunctionButton2", "");
UpdateSettingIfMissing("FunctionButton3", "");
UpdateSettingIfMissing("FunctionButton4", "");
UpdateSettingIfMissing("FunctionButton5", "");
UpdateSettingIfMissing("FunctionButton6", "");
}
private static void UpdateSettingIfMissing(string key, string defaultValue)
{
var setting = ConfigurationManager.AppSettings[key];
if (setting == null)
{
UpdateSetting(key, defaultValue);
}
}
private static void UpdateSetting(string key, string value)
{
Configuration configuration = ConfigurationManager.OpenExeConfiguration(@"Keymon.exe");
configuration.AppSettings.Settings.Add(key, value);
configuration.Save(ConfigurationSaveMode.Minimal);
}

配置文件看起来像这样

    <add key="ShowDebugWindow" value="false,false" />
<add key="AppDataSubFolder" value="DLI\Keymon" />
<add key="KeymonSettingsFile" value="Keymon.xml,Keymon.xml" />
<add key="KeymonSettingsFileExtension" value="XML,XML" />
<add key="LeftButton1" value="" />
<add key="RightButton1" value="" />
<add key="FunctionButton1" value="" />
<add key="FunctionButton2" value="" />
<add key="FunctionButton3" value="" />
<add key="FunctionButton4" value="" />
<add key="FunctionButton5" value="" />
<add key="FunctionButton6" value="" />

请注意,该值现在有“2”个以逗号分隔的值...为什么???因此,作为测试,我删除了所有键,并运行了我的程序。这些值现在都是正确的,但是现在 keymon 崩溃了,因为没有加载键/值。这很奇怪,因为在 keymon 中我运行这个..

        if (RunFixer)
{
System.Diagnostics.Process.Start("KeymonConfigFixer.exe");
ConfigurationManager.RefreshSection("appSettings");
}

所以我不明白。我错过了什么?为什么要这样做?帮助

最佳答案

这是因为在 UpdateSettingIfMissing 中您使用了 ConfigurationManager.AppSettings[key],它在 UpdateSetting< 中打开当前应用程序(您的控制台应用程序)的应用程序设置 你打开 Keymon.exe 的设置

关于c# - ConfigurationManager 没有按预期保存值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17032805/

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