我爲我的安裝程序做的是使用App.Config中的「file」屬性。該塊的appSettings需要一個「文件」屬性,就像這樣:
<appSettings file="user.config">
<add key="foo" value="some value unchanged by setup"/>
</appSettings>
「文件」屬性是有點像CSS,在最具體的設置獲勝。如果您在user.config中定義了「foo」以及App.config,則會使用user.config中的值。
然後,我有一個配置生成器,它使用字典中的值將第二個appSettings塊寫出到user.config(或任何你想要調用它的)。
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();
}
}
}
}
在你安裝程序,只需添加的東西就像在你安裝方法如下:
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);
我們用它來我們的測試,培訓和生產服務器,所以我們要做的就是指定安裝過程中的機器名稱和密碼,以及我們所關心的一切。它曾經是一個3小時的過程,包括通過多個配置文件來設置密碼。現在它幾乎完全自動化。
希望這會有所幫助。
謝謝你,它看起來像我以後的解決方案。雖然我遇到了問題,但如果我在安裝程序中重寫Install方法,則自定義UI中的值不在上下文參數中。我使用正確的方法嗎?乾杯 – MrEdmundo 2009-12-04 10:26:08