Search code examples
c#configuration-files

C# How do I modify configuration file of another application and save the change?


I know similar question was asked before more than once. I read some of the answers yet didn't find a clear one for my issue. To the point, I two applications say A & B. App A has a configuration file as follows:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key = "Key0" value = "4567" />
    <add key = "Key1" value = "1" />
    <add key = "Key2" value = "2" />
  </appSettings>
</configuration>

App B tries to modify "Key0" of App A configuration file:

namespace ModifyOtherConfig
{
    public partial class Form1 : Form
    {
        string otherConfigFilePath;
        public Form1()
        {
            InitializeComponent();
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
            fileMap.ExeConfigFilename = @"c:\users\om606\documents\visual studio 2015\projects\csharptesting\csharptesting\bin\debug\csharptesting.exe";
            Configuration otherConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);


            string otherSetting = otherConfig.AppSettings.Settings["Key0"].Value;
            MessageBox.Show(otherSetting);
            otherSetting = "098";
            MessageBox.Show(otherSetting);
            otherConfig.SaveAs(fileMap.ExeConfigFilename, ConfigurationSaveMode.Full);
        }
    }
}

When I try to run this code I get the following error:

An unhandled exception of type 'System.Configuration.ConfigurationErrorsException' occurred in System.Configuration.dll Additional information: Data at the root level is invalid. Line 1, position 1.

What do I do wrong? Do I miss something very obvious? I'd appreciate if someone could point me in the right direction.


Solution

  • Oh, you're pointing your fileMap.ExeConfigFilename to the .exe, change it to point to the .config file instead. That's why you are seeing the xml error.

    fileMap.ExeConfigFilename = @"c:\users\om606\documents\visual studio 2015\projects\csharptesting\csharptesting\bin\debug\csharptesting.exe.config";
    

    for your other issue, do:

    otherConfig.AppSettings.Settings.Remove("Key0");
    otherConfig.AppSettings.Settings.Add("Key0", "098");
    

    then save it.