如何强制文件始终被覆盖?

时间:2016-04-20 16:15:26

标签: windows-installer custom-action advanced-installer

我们安装程序的旧版本中的一个文件似乎与较新版本的同一文件相比具有较新的修改日期,因此在安装新版本的安装程序后该文件消失了。

我将.aip更改为“始终覆盖现有文件”,但这不起作用。我尝试在安装新版本之前删除该文件并且工作正常,因此看起来“始终覆盖现有文件”不会产生任何影响。

我错过了什么吗?如何确保始终覆盖文件?

更新1。

我检查过的其他事情:

  • 在较旧的安装程序版本的组件属性中,“Never Overwrite”属性未设置。
  • 尝试将我的自定义操作(运行文件)移动到Finish Dialogs Stage - 同样的行为。
  • 尝试在运行新版本的安装程序之前手动删除文件 - 行为也相同,但仅在日志中'MSI(s)(C4:40)[16:01:58:046]:验证文件的可访问性:b.bat'步骤不见了。

4 个答案:

答案 0 :(得分:2)

Windows Installer中没有任何内容可以做到这一点。我的意思是,这个功能在Component或File表中没有位。所以我怀疑AI可能正在使用#34;版本说谎"诀窍并说该文件具有最大可能版本(即使它是一个数据文件),以便它将覆盖系统上已有的文件。无论哪种方式,Windows都不会替换已经修改过的文件(谁想破坏用户数据?)因此有必要明确删除它。

答案 1 :(得分:1)

请检查旧版安装程序中文件的组件是否设置了“从不覆盖”属性?如果是这种情况,那么在升级安装期间,将保留旧文件(将跳过较新的文件安装),但由于Windows Installer错误,旧文件将在旧版本卸载期间删除(在RemoveExistingProducts操作上执行)。 / p>

如果是这种情况,那么(如果可能的话)应该从旧文件组件中删除Never Overwrite属性。

答案 2 :(得分:0)

疯狂的想法,但如果您将文件组件GUID设置为始终随每个构建更改,该怎么办?在wix中,你设置Guid =" *"。这样您就不会被MSI的组件/文件转换规则所困。虽然非正统,但我认为这会在每次升级时覆盖该文件。

答案 3 :(得分:0)

我也遇到了你上面提到的同样问题,我以棘手的方式解决了这个问题。希望它可以帮到你。

  1. 重命名新版本文件并创建新的msi安装程序。我在我的问题中将其重命名为Jitsi2.exe
  2. 因此,重命名后,它将安装在您的新更新中。
  3. 现在,在您的msi文件中添加一个批处理文件,其中包含删除旧文件的命令,并再次将Jitsi2.exe重命名为其原始名称。
  4. 安装完成后,您必须调用此批处理文件。在高级安装程序中,您可以在安装完成时执行某些操作,这是调用该批处理文件的时间。(注意:当我调用此批处理文件时,它会进入某种CMD循环。所以我将此批处理文件转换为exe文件使用免费的开源蝙蝠到exe转换器软件,它现在按预期工作)