Ecrivez un fichier de configuration secondaire avec un bloc appSettings en utilisant les paramètres du programme d'installation. Dans votre fichier de configuration principal, utilisez l'attribut de fichier dans appsettings pour référencer le deuxième fichier de configuration, comme ceci:
<appSettings file="User.config">
Paramètres dans la configuration secondaire remplacera toutes les clés correspondantes dans la configuration principale.
Dans votre installateur:
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();
}
}
}
Je regardais une ancienne version de la question. En utilisant le lien que j'ai fourni, vous pouvez avoir un écran contextuel la première fois que l'application est lancée pour inviter l'utilisateur à changer les choses. –