5

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

  • 客户端设置测试
  • ClientSetupProduction
  • 客户端更新测试
  • 客户更新生产

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

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

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

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

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

4

1 回答 1

5

Windows Installer 不会更新已修改的文件

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

你有一些选择:

  • 包括修改文件的自定义操作。这可能是脚本或 .NET 代码。

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

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

于 2009-08-31T23:05:35.797 回答