Escriba un archivo de configuración secundaria con un bloque appSettings usando la configuración del instalador. En el archivo de configuración principal, utilice el atributo de archivo en appsettings para hacer referencia al segundo archivo de configuración, así:
<appSettings file="User.config">
ajustes en la configuración secundaria anulará cualquier clave que coinciden en la configuración principal.
En su instalador:
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
string server = Context.Parameters["Server"];
string port = Context.Parameters["Port"];
string targetDir = Context.Parameters["TargetDir"];
// Build your connection string from user-input parameters and add them to dictionary
WriteAppConfig(targetDir, server, port);
}
private void WriteAppConfig(string targetDir, string server, string port)
{
string configFilePath = Path.Combine(targetDir, "User.config");
IDictionary<string, string> userConfiguration = new Dictionary<string, string>();
userConfiguration["Server"] = server;
userConfiguration["Port"] = port;
ConfigGenerator.WriteExternalAppConfig(configFilePath, userConfiguration);
}
public class ConfigGenerator
{
public static void WriteExternalAppConfig(string configFilePath, IDictionary<string, string> userConfiguration)
{
using (XmlTextWriter xw = new XmlTextWriter(configFilePath, Encoding.UTF8))
{
xw.Formatting = Formatting.Indented;
xw.Indentation = 4;
xw.WriteStartDocument();
xw.WriteStartElement("appSettings");
foreach (KeyValuePair<string, string> pair in userConfiguration)
{
xw.WriteStartElement("add");
xw.WriteAttributeString("key", pair.Key);
xw.WriteAttributeString("value", pair.Value);
xw.WriteEndElement();
}
xw.WriteEndElement();
xw.WriteEndDocument();
}
}
}
Estaba viendo una versión anterior de la pregunta. Utilizando el enlace que proporcioné, puede tener una pantalla emergente la primera vez que se inicia la aplicación para solicitar al usuario que cambie las cosas. –