I’ve got a program which uses app.config for storing some preferences. The problem is that if the program is installed in C:\program files\<project name> then the changing of preferences is not possible due to the fact that all files in program files\<project name> are available only to administrator.
My code:
public static bool EditKeyPair(string key, string value)
{
bool success = true;
// Open App.Config of executable
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
KeyValueConfigurationCollection settings = config.AppSettings.Settings;
// update SaveBeforeExit
settings[key].Value = value;
if (!config.AppSettings.SectionInformation.IsLocked)
{
//save the file
config.Save(ConfigurationSaveMode.Modified);
Debug.WriteLine("** Settings updated.");
}
else
{
Debug.WriteLine("** Could not update, section is locked.");
success = false;
}
//reload the section you modified
ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name);
return success;
}
The question is: Is there a way how to elevate privileges for this action? Or how else to solve the problem?
Thank you!
Global app.config files (for EXEs) generally aren’t meant to be edited by the program that uses them – more typically by installers and the like. What you probably want is simply User Settings (a simple matter of changing the scope). They generally get stored in
AppData, and even better, proxy properties for the settings are auto-generated, so you can do something like:This is (pretty much) all I’ve ever needed to do when managing settings!