installation - 运行 RemovePreviousVersion 时,MSI 不会安装所有文件

标签 installation wix windows-installer wix3

我有一个使用 WiX 版本 3 的 MSI 版本。

我们正在部署的产品的所有以前的安装程序在指定的配置下都可以正常工作(即:如果以前的版本存在,请删除,然后安装新版本) - 但是,我们构建的新 MSI 在运行时不会安装所有文件“先删除”路径。

如果我们手动删除现有安装,然后运行新版本,所有文件都会安装 - 当我检查 Orca 中的 MSI 文件时,文件和功能会显示出来,而且似乎很好。

我们尝试在打开详细和额外日志记录( /l*vx )的情况下运行,但是我们可以看到文件是否未注册和安装。

有什么想法或建议吗?这正在插入我们上墙。

最佳答案

根据默认的自定义操作序列,Windows Installer 在删除任何现有版本的软件之前确定需要安装/覆盖哪些文件。 Windows Installer 使用 REINSTALLMODE 属性的值来告诉它如何决定何时覆盖文件。如果 REINSTALLMODE 包含“o”,那么它只会安装版本不同或文件不存在的文件;只有在文件的修改日期 <= 创建日期(即文件未修改)时才会安装非版本化文件。如果 REINSTALLMODE 包含“a”,它将始终安装该文件,而不管附加到现有文件的任何版本或日期信息。

您的场景中发生的情况很可能如下:

  • Windows Installer 确定要安装的文件。它决定不需要安装某些文件(可能是因为它们已经存在并且与 MSI 中的文件版本相同或更新)。
  • 先前版本的软件被删除,包括 Windows Installer 确定不需要安装的文件。
  • Windows 安装程序会为新安装安装文件,但不会安装它确定不需要安装的文件。

  • 最终的结果是升级软件后丢失了一堆文件。设置 REINSTALLMODE=amus 而不是 omus 可能会解决您的问题,但您应该确保您知道这如何影响安装的其余部分。如果您不想覆盖任何文件,则需要将这些组件标记为“永不覆盖”。

    关于installation - 运行 RemovePreviousVersion 时,MSI 不会安装所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3860513/

    相关文章:

    javascript - 你如何在 html 上设置 processingJS?

    WiX 服务安装程序和自定义安装事件

    wix - 如何在 Wix 安装期间删除目标 GAC 文件

    visual-studio-2008 - 为Windows服务创建MSI安装程序

    c# - 调试安装程序项目

    python,从zip文件制作一个windows msi安装程序

    macos - 如何在 Vim for MacOS 中初始化 sparkup 插件?

    c++ - 在 Windows 中安装最新的 cppunit

    wpf - WPF 应用程序的安装程序解决方案(具有更新/试用支持)

    process - 如何从WiX杀死进程