如何在安装时设置应用程序设置(通过安装程序类)

我有一个安装程序类的Visual Studio安装项目。 在安装程序类中,我设置如下设置:

MessageBox.Show(Properties.Settings.Default.MySetting); Properties.Settings.Default.MySetting = "Foo"; Properties.Settings.Default.Save(); MessageBox.Show(Properties.Settings.Default.MySetting); 

问题是,即使我知道这个代码正在执行(我正在做其他的东西),设置永远不会设置!

消息框确实表明正在设置该值,但是当我转到.config文件时,该值仍为空白!

任何人有任何想法和/或可能的解决方法?

我为我的安装程序做的是使用App.Config中的“file”属性。 appSettings块采用“file”属性,如下所示:

    

“file”属性有点像CSS,因为最具体的设置获胜。 如果在user.config和App.config中定义了“foo”,则使用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 userConfiguration) { using (XmlTextWriter xw = new XmlTextWriter(configFilePath, Encoding.UTF8)) { xw.Formatting = Formatting.Indented; xw.Indentation = 4; xw.WriteStartDocument(); xw.WriteStartElement("appSettings"); foreach (KeyValuePair pair in userConfiguration) { xw.WriteStartElement("add"); xw.WriteAttributeString("key", pair.Key); xw.WriteAttributeString("value", pair.Value); xw.WriteEndElement(); } xw.WriteEndElement(); xw.WriteEndDocument(); } } } } 

在安装程序中,只需在Install方法中添加以下内容:

 string configFilePath = string.Format("{0}{1}User.config", targetDir, Path.DirectorySeparatorChar); IDictionary userConfiguration = new Dictionary(); userConfiguration["Server"] = Context.Parameters["Server"]; userConfiguration["Port"] = Context.Parameters["Port"]; ConfigGenerator.WriteExternalAppConfig(configFilePath, userConfiguration); 

我们将它用于我们的测试,培训和生产服务器,因此我们所要做的就是在安装过程中指定机器名称和密码,并为我们处理所有事情。 它曾经是一个3小时的过程,包括通过多个配置文件来设置密码。 现在它几乎完全自动化了。

希望这可以帮助。

最后我放弃了并且在安装应用程序后有一个RunOnce类型的方法来完成这些工作。

老实说,我不知道在安装程序期间是否支持此function – 但如果确实如此,请确保在Settings.Default上调用Save()

简短的回答是安装程序类不支持它。 您只需要了解从系统目录运行的msiexec.exe调用安装程序类方法,并且该环境可能无法知道您在完全不知道的目录中的某个位置有一个设置文件。 这就是为什么它适用于明确转到文件安装位置并在那里更新它的代码。