【问题标题】:Having WiX upgrade a config file with missing items让 WiX 升级缺少项目的配置文件
【发布时间】:2013-04-12 22:11:51
【问题描述】:

我刚刚开始使用 WiX 作为我现有应用程序的安装框架。该应用程序有一个 App.Config 文件,用于控制各种客户特定的设置。这些设置大部分都是在内部修改的,用户无法控制。

这样的配置文件的一个例子是:

[...snip]
<applicationSettings>
    <setting name="DatabaseConnectionString" serializeAs="String">
        <value>Data Source=localhost;Initial Catalog=CustomersDatabase;Persist Security Info=True;Integrated Security=True</value>
    </setting>
</applicationSettings>
[snip...]

当应用程序的较新版本交付时,它将有一个库存配置文件,其中包括任何新的应用程序设置:

[...snip]
<applicationSettings>
    <setting name="DatabaseConnectionString" serializeAs="String">
        <value>Data Source=localhost;Initial Catalog=NonProductionDatabase;Persist Security Info=True;Integrated Security=True</value>
    </setting>
    <setting name="NewConfigItem" serializeAs="String">
        <value>ConfigDetails</value>
    </setting>
</applicationSettings>
[snip...]

我想设置我的 WiX 安装程序,以便在升级期间创建一个合并的 App.Config,这样现有设置不会受到影响,但新的配置项会以其默认值插入:

[...snip]
<applicationSettings>
    <setting name="DatabaseConnectionString" serializeAs="String">
        <value>Data Source=localhost;Initial Catalog=CustomersDatabase;Persist Security Info=True;Integrated Security=True</value>
    </setting>
    <setting name="NewConfigItem" serializeAs="String">
        <value>ConfigDetails</value>
    </setting>
</applicationSettings>
[snip...]

但是,我不希望安装程序事先知道配置选项是什么;我只是想让它扫描现有文件,如果发现缺少任何选项,则从安装程序中添加新选项。

这可能吗?

【问题讨论】:

    标签: xml installation wix configuration-files


    【解决方案1】:

    是的,您需要编写一个自定义操作来读取现有的 xml 文件。然后,我建议根据读取的数据将临时记录添加到 XmlConfig 表中,为 described in this question

    【讨论】:

    • 虽然我并不害怕(好吧,也许有一点)通过您在参考文章中提到的 WcaAddTempRecord() 方法使用 c++ 添加临时记录,但我更喜欢使用托管语言.是否存在可以执行此操作的现有 .NET 库调用,还是我必须改为 P/Invoke 这个库? - 没关系!也许我应该在开始下意识地提问之前阅读整篇文章。 :)
    • 简短的回答是 DTF,它也是 WiX 工具集的一部分。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2013-11-29
    • 2018-03-26
    • 1970-01-01
    • 2011-02-27
    • 2016-12-27
    相关资源
    最近更新 更多