在Windows C#应用程序安装期间动态获取和保存配置文件中的信息

时间:2012-12-20 13:31:24

标签: c# windows installation

如何在安装时创建一个在配置文件中动态获取和保存信息的设置。保存的信息在应用程序中使用。 对于Ex:在安装应用程序时将数据库名称或FTP详细信息作为用户输入。

使用的工具:Visual Studio 2010

3 个答案:

答案 0 :(得分:0)

您可以在运行时修改app.config文件中的设置,并永久保存这些更改。例如,如果要连接到数据库,则在应用程序启动时提供服务器名称和数据库名称。看这篇文章 Update app.config system.net setting at runtime

答案 1 :(得分:0)

我们已成功使用xslt从xml文件中使用适当的设置转换我们的Web.Config文件。您可以查看以下主题

Handling web.config differences across multiple machines when using version control

详细说明了这一点。会认为你可以用windows做类似的事情。

这样的事情,将此文件命名为 App.Config.xslt 并调用它传递你的设置,这将生成带有正确替换的App.Config。

<强> C#

   class Program
    {
        static void Main(string[] args)
        {
            XPathDocument xPathDocument = new XPathDocument(@"..\..\YourSettings.xml");
            XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
            xslCompiledTransform.Load(@"..\..\App.Config.xslt");
            XmlTextWriter writer = new XmlTextWriter(@"..\..\App.Config", null);
            xslCompiledTransform.Transform(xPathDocument, null, writer);
        }
    }

<强> App.Config.xslt

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
<xsl:template match="YourSettings">
    <configuration>
      <connectionStrings>
        <add name="YourApp" connectionString="User Id={YourAppId};Password=&quot;{YourAppPassword}&quot;;Data Source={YourAppName}" />
      </connectionStrings>
</configuration>
</xsl:template>
</xsl:stylesheet>

和您的配置设置驻留在另一个文件

<强> YourSettings.xml

<?xml version="1.0" encoding="utf-8" ?>
<YourSettings>
  <YourAppId>localhost</YourAppId>
  <YourAppPassword>password1234</YourAppPassword>
  <YourAppName>username</YourAppName>
</YourSettings>

答案 2 :(得分:0)

我已经非常成功地使用自定义动作dll来做你正在谈论的事情。

如果你谷歌这个你会发现很多点击,一个这样的工作如何here的例子(在向你展示结构方面似乎相当不错)。

你的dll中的代码只是c#,所以它可以做你想做的任何事情,动态写入配置文件等。但是,你可能有限制,但是,根据运行设置的帐户的权限 - 例如,大多数“用户”帐户将无法写入c:\ program files ..... - 这就是许多安装程序需要以管理员身份运行的原因。

使用VS Setup项目设置,您可以将信息从设置传递到Dll(请注意安装覆盖上的入站参数),尽管您可以传递的数据量有限。我通常传入安装文件夹(所以我的dll知道文件要修改的位置)和“环境”设置,还有用户名密码等,所以我知道要点击什么数据库(并使用什么帐户来点击它),什么帐户可以运行这样的服务,等等。这些可以通过您可以引入设置项目本身的有限范围的对话框来捕获。

这种方法也意味着在开发过程中我们不必过多担心配置文件中的值,因为我们知道在安装过程中它们会被正确设置。特别是使用用户名和密码,这意味着开发人员不需要知道它们(执行安装的操作员是唯一知道它们的人),从安全角度来看这是很好的。

最后请注意,这里还有一个用于卸载的钩子,因此如果您需要撤消某些内容,可以使用它。