如何从以前的非 msi 安装中复制文件?

Posted

技术标签:

【中文标题】如何从以前的非 msi 安装中复制文件?【英文标题】:How to copy files from prevoius non-msi installation? 【发布时间】:2011-10-14 12:51:14 【问题描述】:

我正在将我的安装程序从 NSIS 更改为 MSI(使用 Wix),并且我需要将配置文件从旧安装复制到新安装以防升级。

在实际安装新版本之前,我需要通过执行卸载程序来卸载旧版本。

所以我最终得到了一组自定义操作:首先,如果应用程序正在运行,我会停止它;然后我将配置文件复制到[TempFolder];然后我启动旧应用程序的卸载程序;之后,我让 MSI 完成它的工作,作为最后一步,我将一堆 <CopyFile>[TempFolder] 复制到安装文件夹。

问题是 Microsoft Installer 5(Windows 7 和 Windows 2008 R2 之一)似乎在开始我的自定义操作之前检查文件是否存在,然后它不会复制它们。它适用于以前的 Windows Installer 版本,最高 4.5。

有没有办法在我的自定义操作之后强制执行检查?或者有更好的方法来完成我列出的所有步骤?

【问题讨论】:

【参考方案1】:

MoveFiles 动作出现在 InstallFiles 之前。也许文件已正确复制,但 MSI 会覆盖它们。请生成日志文件以获取更多详细信息。

【讨论】:

不,问题是操作永远不会执行:文件不存在。让它工作的唯一方法是在启动安装程序之前在临时文件夹中创建假文件。我的猜测是 InstallValidate 操作检查文件是否存在,如果没有找到,它将跳过副本。但这仅发生在 msi 5 上,因为使用 msi 4.5 它可以完美运行 何时计划将文件复制到临时文件的自定义操作?任何影响成本计算的自定义操作都应在 CostInitialize 操作之前排序。 我无法在 CostInitialize 之前安排它,因为它是一个延迟操作(我需要它以提升的权限运行) 那么您将不得不使用自定义操作而不是复制操作。 你的意思是我还需要一个自定义操作来将文件从临时文件夹复制到安装文件夹吗?

以上是关于如何从以前的非 msi 安装中复制文件?的主要内容,如果未能解决你的问题,请参考以下文章

安装后MSI文件复制到哪里?

如何获取最新的 JRE / JDK 作为 zip 文件而不是 EXE 或 MSI 安装程序? [关闭]

VMware Workstation 在安装VMware Tools并重启后不能拖动复制文件

如何找到已安装 MSI 文件的升级代码?

如何使用 android AVD 安装 .apk 文件? [复制]

如何在不从磁盘中删除文件的情况下 git rm 文件? [复制]