Lo que hago para mis instaladores es utilizar el atributo "archivo" en App.Config. El bloque appsettings toma un atributo de "archivo", así:
<appSettings file="user.config">
<add key="foo" value="some value unchanged by setup"/>
</appSettings>
El "archivo" atributo es algo así como CSS, en el que gana el ajuste más específicos. Si tiene definido "foo" en user.config y App.config, se utiliza el valor en user.config.
Luego, tengo un generador de configuraciones que escribe un segundo bloque appSettings en user.config (o como quiera llamarlo), usando valores en un diccionario.
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace Utils
{
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();
}
}
}
}
En su instalador, sólo tiene que añadir algo como lo siguiente en su método de instalación:
string configFilePath = string.Format("{0}{1}User.config", targetDir, Path.DirectorySeparatorChar);
IDictionary<string, string> userConfiguration = new Dictionary<string, string>();
userConfiguration["Server"] = Context.Parameters["Server"];
userConfiguration["Port"] = Context.Parameters["Port"];
ConfigGenerator.WriteExternalAppConfig(configFilePath, userConfiguration);
Lo usamos para nuestras pruebas, la formación y los servidores de producción, por lo que todo lo que tenemos que hacer es especificar el nombre de la máquina y la contraseña durante la instalación, y todo está a nuestro cuidado. Solía ser un proceso de 3 horas, que incluía varios archivos de configuración para configurar contraseñas. Ahora está casi completamente automatizado.
Espero que esto ayude.
Gracias por esto, parece el tipo de solución que estoy buscando. Aunque me tocó un problema, si anulo el método de instalación en mi instalador, los valores de la interfaz de usuario personalizada no están en los parámetros de contexto. ¿Estoy usando el método correcto? Cheers – MrEdmundo
Ignore eso, no había pasado los datos de la interfaz de usuario en la pantalla de edición de CustomActions. – MrEdmundo