Co robię dla moich instalatorów to użycie atrybutu "file" w App.Config. Blok appSettings wykonuje „plik” atrybut tak:
<appSettings file="user.config">
<add key="foo" value="some value unchanged by setup"/>
</appSettings>
„Akta” atrybut jest coś jak CSS, w tym najbardziej specyficznych zwycięstw ustawień. Jeśli masz zdefiniowane "foo" w pliku user.config oraz App.config, używana jest wartość w pliku user.config.
Następnie mam generator konfiguracji, który wypisuje drugi blok aplikacji do pliku user.config (lub cokolwiek chcesz go nazwać), używając wartości w słowniku.
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();
}
}
}
}
W instalatora, wystarczy dodać coś jak poniżej w Install metody:
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);
Używamy go do naszych testów, szkoleń i serwerów produkcyjnych, więc wszystko, co musimy zrobić, to określić nazwa maszyny i hasło podczas instalacji, a wszystko załatwione dla nas. Był to proces trwający 3 godziny, obejmujący przechodzenie przez wiele plików konfiguracyjnych w celu ustawienia haseł. Teraz jest prawie całkowicie zautomatyzowany.
Mam nadzieję, że to pomoże.
Dziękuję za to, wygląda to na rodzaj rozwiązania, którego szukam. Chociaż mam problem, jeśli nadpisuję metodę instalacji w moim instalatorze, wartości z niestandardowego interfejsu użytkownika nie znajdują się w parametrach kontekstu. Czy używam właściwej metody? Pozdrowienia – MrEdmundo
Zignoruj to, nie przekazałem danych z interfejsu użytkownika na ekranie edycji CustomActions. – MrEdmundo