代码之家  ›  专栏  ›  技术社区  ›  Chris Doggett

安装期间强制覆盖App.config

  •  5
  • Chris Doggett  · 技术社区  · 17 年前

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

    • 客户端设置测试
    • 客户端更新测试
    • 客户端更新产品

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

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

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

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

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

    1 回复  |  直到 9 年前
        1
  •  5
  •   Cheeso    17 年前

    Windows Installer won't update a modified file .

    如果修改日期更晚,则非版本文件为用户数据 在计算机上创建文件的日期之前,请勿安装 由于用户自定义项将被删除,文件将被删除。如果修改了 和创建日期相同,请安装该文件。如果创建日期为 晚于修改日期,则认为该文件未修改, 安装该文件。

    您有一些选择:

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

    • 照你说的做-将现有文件移到一边。安装程序不会停止安装。但是你需要确保它按照你想象的顺序发生。你可能需要 Orca 去弄清楚订单。

    • Scripting.FileSystemObject . 然后Windows installer将覆盖它。