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

C# 在Windows C应用程序安装期间,动态获取信息并将其保存在配置文件中,c#,windows,installation,C#,Windows,Installation,如何创建一个设置,在安装时在配置文件中动态获取和保存信息。保存的信息将在应用程序中使用。 例如:安装应用程序时,获取数据库名称或FTP详细信息作为用户输入 使用的工具:Visual Studio 2010您可以在运行时修改app.config文件中的设置,并将这些更改永久保存。例如,如果正在连接到数据库,则在应用程序启动时提供服务器名称和数据库名称。看到这个帖子了吗 我们已经成功地使用xslt将Web.Config文件从xml文件转换为具有适当设置的文件。您可以查看以下线程 它详细说明了这一点。

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


使用的工具:Visual Studio 2010

您可以在运行时修改app.config文件中的设置,并将这些更改永久保存。例如,如果正在连接到数据库,则在应用程序启动时提供服务器名称和数据库名称。看到这个帖子了吗

我们已经成功地使用xslt将Web.Config文件从xml文件转换为具有适当设置的文件。您可以查看以下线程

它详细说明了这一点。我想你可以用windows做类似的事情

类似于这样,将此文件命名为App.Config.xslt并调用它,并将生成的设置和App.Config传递给正确的替换

C

App.Config.xslt

以及驻留在另一个文件中的配置设置

YourSettings.xml


我已经非常成功地使用了自定义操作DLL来完成您所说的工作

如果你在谷歌上搜索这个,你会发现很多点击率,其中一个关于这些如何工作的例子在向你展示结构方面似乎相当不错

dll中的代码仅为c,因此它可以执行您希望它执行的任何操作,如动态写入配置文件等。但是,根据运行安装程序的帐户的权限,您可能会有一些限制-例如,大多数用户帐户将无法写入c:\program files…-这就是为什么许多安装程序需要以管理员身份运行

使用VS Setup项目设置,您可以将安装程序中的信息传递到Dll中。请注意,安装覆盖上的入站参数,尽管您可以传递的数据量是有限的。我通常会传入安装文件夹,这样我的dll就知道文件要修改的位置和环境设置,还有用户名密码等,这样我就知道要访问哪个数据库,使用哪个帐户访问它,在哪个帐户下运行这样的服务,等等。可以通过在安装项目本身中引入的有限范围的对话框捕获这些信息

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


最后请注意,这里还有一个用于卸载的钩子,因此,如果您需要撤消某些内容,可能会有一个位置来执行此操作。

您使用的是什么安装包工具?你试过什么?您想保存/检索什么?我已经尝试过了,我可以创建一个新的对话框,但不知道如何编写代码。找不到任何用于编写代码的cs文件。
   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);
        }
    }
<?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>
<?xml version="1.0" encoding="utf-8" ?>
<YourSettings>
  <YourAppId>localhost</YourAppId>
  <YourAppPassword>password1234</YourAppPassword>
  <YourAppName>username</YourAppName>
</YourSettings>