Quello che faccio per i miei installatori è utilizzare l'attributo "file" in App.Config. Il blocco appSettings prende un attributo "file", in questo modo:
<appSettings file="user.config">
<add key="foo" value="some value unchanged by setup"/>
</appSettings>
Il "file" attributo è un po 'come CSS, in quanto le più specifiche vittorie di impostazione. Se hai "foo" definito in user.config e in App.config, viene utilizzato il valore in user.config.
Quindi, ho un generatore di configurazione che scrive un secondo blocco appSettings su user.config (o qualsiasi altra cosa si voglia chiamare), utilizzando i valori in un dizionario.
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();
}
}
}
}
Nel vostro installatore, basta aggiungere qualcosa di simile al seguente nel metodo Installare:
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);
L'usiamo per i nostri test, la formazione, e server di produzione, quindi tutto quello che dobbiamo fare è specificare il nome della macchina e la password durante l'installazione, e tutto è stato curato per noi. È stato un processo di 3 ore, incluso il passaggio a più file di configurazione per impostare le password. Ora è quasi interamente automatizzato.
Spero che questo aiuti.
Grazie per questo, sembra il tipo di soluzione che sto cercando. Sebbene abbia riscontrato un problema, se sovrascrivo il metodo di installazione nel mio programma di installazione, i valori dell'interfaccia utente personalizzata non sono inclusi nei parametri di contesto. Sto usando il metodo giusto? Cheers – MrEdmundo
Ignora, non ho passato i dati dall'interfaccia utente nella schermata di modifica di CustomActions. – MrEdmundo