如何创建一个设置,在安装时在配置文件中动态获取和保存信息。保存的信息在应用程序中使用。例如:在安装应用程序时获取数据库名称或 FTP 详细信息作为用户输入。
使用的工具:Visual Studio 2010
如何创建一个设置,在安装时在配置文件中动态获取和保存信息。保存的信息在应用程序中使用。例如:在安装应用程序时获取数据库名称或 FTP 详细信息作为用户输入。
使用的工具:Visual Studio 2010
我已经非常成功地使用了自定义操作 dll 来完成您所说的事情。
如果你用谷歌搜索这个,你会发现很多热门,这里就是这些工作方式的一个例子(在向你展示结构方面似乎相当不错)。
您的 dll 中的代码只是 c#,因此它几乎可以做任何您想做的事情,动态写入配置文件等。但是,您可能会受到限制,但是,基于运行设置的帐户的权限 - 例如大多数“用户”帐户将无法写入 c:\program 文件..... - 这就是为什么许多安装程序需要以管理员身份运行的原因。
使用 VS Setup 项目设置,您可以将设置中的信息传递到 Dll(请注意安装覆盖上的入站参数),尽管您可以传递的数据量是有限的。我通常传入安装文件夹(所以我的 dll 知道要修改文件的位置)和“环境”设置,还有用户名密码等,所以我知道要访问哪个数据库(以及使用什么帐户来访问它),在什么帐户下运行某某服务等。这些可以通过您可以引入安装项目本身的有限范围的对话框来捕获。
这种方法还意味着在开发过程中我们不必过多担心配置文件中的值,因为我们知道它们会在安装过程中正确设置。特别是对于用户名和密码,这意味着开发人员不需要知道它们(执行安装的操作员是唯一知道它们的人),从安全角度来看这很好。
最后请注意,这里还有一个用于卸载的钩子,因此如果您可能需要撤消某些操作,则可以在此处进行操作。
您可以在运行时修改 app.config 文件中的设置,并将这些更改永久保存。例如,如果要连接到数据库,则在应用程序启动时提供服务器名称和数据库名称。请参阅这篇文章 在运行时更新 app.config system.net 设置
我们已经成功地使用 xslt 将我们的 Web.Config 文件转换为 xml 文件中的适当设置。你可以看看下面的线程
它详细说明了这一点。会认为你可以用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);
}
}
应用程序.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="{YourAppPassword}";Data Source={YourAppName}" />
</connectionStrings>
</configuration>
</xsl:template>
</xsl:stylesheet>
并且您的配置设置位于另一个文件中
你的设置.xml
<?xml version="1.0" encoding="utf-8" ?>
<YourSettings>
<YourAppId>localhost</YourAppId>
<YourAppPassword>password1234</YourAppPassword>
<YourAppName>username</YourAppName>
</YourSettings>