¿Cómo obtener privilegios de administrador para editar app.config en C #?

Tengo un progtwig que usa app.config para almacenar algunas preferencias. El problema es que si el progtwig se instala en C: \ archivos de progtwig \ , el cambio de preferencias no es posible debido a que todos los archivos en los archivos de progtwig \ solo están disponibles para el administrador.

Mi código:

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; } 

La pregunta es: ¿hay una manera de elevar los privilegios para esta acción? ¿O cómo resolver el problema?

¡Gracias!

Los archivos globales de aplicación.config (para EXE) generalmente no están destinados a ser editados por el progtwig que los usa, más típicamente por instaladores y similares. Lo que probablemente desee es simplemente Configuración de usuario (una simple cuestión de cambiar el ámbito). Por lo general, se almacenan en AppData , y aún mejor, las propiedades de proxy para la configuración se generan automáticamente, por lo que puede hacer algo como:

 Properties.Settings.Default.Foo = "bar"; Properties.Settings.Default.Save(); 

¡Esto es (prácticamente) todo lo que siempre he necesitado al administrar las configuraciones!

Para responder a su pregunta, tal como está, no hay manera de elevar ‘temporalmente’. La aplicación debe iniciarse con una solicitud de elevación.

Por lo general, si una aplicación normalmente no necesita elevación, puede desglosar la funcionalidad que necesita elevación en un modo controlado por un interruptor y luego lanzarse con un verbo de runas.

 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.UseShellExecute = true; startInfo.WorkingDirectory = Environment.CurrentDirectory; startInfo.FileName = Application.ExecutablePath; startInfo.Arguments = "-doSomethingThatRequiresElevationAndExit"; startInfo.Verb = "runas"; try { Process p = Process.Start(startInfo); p.WaitForExit(); } catch(System.ComponentModel.Win32Exception ex) { return; } 

Sin embargo, es posible que desee colocar configuraciones de configuración que un usuario quiera modificar según el scope del usuario para que la configuración se encuentre en su directorio de datos de appData , por lo que no requiere elevación.

En las propiedades del proyecto, cambie la configuración de ser Scope = Application a Scope = User. De esa manera, se almacenan en el perfil del usuario y no necesita privilegios de administrador para modificarlos.