【问题标题】:Force overwrite of App.config during installation在安装期间强制覆盖 App.config
【发布时间】:2009-07-29 15:29:30
【问题描述】:

我们目前有 4 个客户端软件安装程序:

  • ClientSetupTest
  • ClientSetupProduction
  • 客户端更新测试
  • ClientUpdateProduction

它们之间的唯一区别是安装程序包含 Crystal Reports 可再发行文件,而更新不包含。测试和生产只是指定它们在哪个环境中运行,唯一的区别是 Client.exe.config 文件中的一行。

愚蠢,我知道,这就是为什么我在摆脱 Crystal Reports 后用一个安装程序替换了它们。新安装程序将选定的环境写入 setup.config,文件属性 (see here) 引用该文件。

“文件”属性对于这个新安装程序的配置文件来说是新的。我遇到的问题是,如果我们在旧安装上修改 Client.exe.config 文件,然后运行新安装程序,则配置文件永远不会使用“file”属性更新。

有没有办法强制它更新文件? RemovePreviousVersions 并不完全有效,因为它是一个不同的安装程序,除非我误解了一些东西。我目前的想法(可能会奏效)是在 OnBeforeInstall 方法中添加代码以将旧的 Client.exe.config 重命名为备份文件,因此它总是会写入新的。不过,似乎安装程序本身应该有一个更简单的解决方案。有什么想法吗?

编辑:在调用 base.OnBeforeInstall() 之前将旧配置文件重命名为 Client.exe.config.old 不起作用。它重命名了文件,但从未写入新文件。

【问题讨论】:

    标签: c# configuration setup-project


    【解决方案1】:

    Windows Installer won't update a modified file

    非版本文件是用户数据 - 如果修改日期晚 比计算机上文件的创建日期,不要安装 该文件,因为将删除用户自定义。如果修改 和创建日期相同,安装文件。如果创建日期 晚于修改日期,文件被视为未修改, 安装文件。

    你有一些选择:

    • 包括一个用于修改文件的自定义操作。这可能是 script 或 .NET 代码。

    • 照你说的做 - 将现有文件移开。安装程序不会停止它。但是你需要确保它按照你想象的顺序发生。您可能需要Orca 来确定顺序。

    • 包含一个自定义选项以将创建日期设置为“今天”。使用Scripting.FileSystemObject 编写脚本自定义操作应该非常简单。然后 Windows 安装程序将覆盖它。

    【讨论】:

    • 谢谢。我会试一试自定义选项。我仍然会遇到不继承他们的自定义设置的问题,但是如果它被修改了,我可以检测到它并复制旧配置。
    猜你喜欢
    • 1970-01-01
    • 2018-10-05
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    相关资源
    最近更新 更多