MSI 安装程序未更新正在使用的文件(Visual Studio 安装程序项目)

In-use files not updated by MSI-installer (Visual Studio Installer project)

我正在使用 Visual Studio Installer Projects 扩展为我的应用程序构建 MSI 安装程序。但是,我的应用程序应该一直处于 运行ning 状态,如果在用户安装我的软件的新版本时它是打开的,打开的文件不会被覆盖,实际上几乎没有更新(尽管没有安装程序错误)。

我发现使用安装程序项目的 "Custom Actions" 到 运行 关闭应用程序的脚本没有帮助,因为 none 的操作被称为 文件被替换之前。

有什么好的方法可以确保 open/locked 文件在 文件应该被覆盖之前被终止?

我们遇到了这个问题,我们想到的解决方案是创建两个应用程序;用户应用程序和更新程序应用程序。 MSI 安装两者。每个应用程序都会检查另一个应用程序是否需要更新,如果需要,则关闭另一个应用程序,下载另一个应用程序的更新程序,运行它,然后重新启动另一个应用程序。此外,每个应用程序都会监视另一个应用程序是否 运行,如果不是,则启动它。

REBOOT: 你是如何安装这个 MSI 的?什么命令行?如果在命令行上设置 REBOOT=ReallySuppress,即使需要重新启动才能完成产品安装,也不会提示您重新启动。

msiexec.exe /i MySetup.msi /QN REBOOT=ReallySuppress

如果您使用的是分发系统,我想抑制重新启动提示可能是标准行为。然后你的产品文件应该在重启后就位(PendingFileRenameOperations 或者可能是一些更新的机制)。

也有可能 Visual Studio 安装程序项目做了一些我不知道的奇怪事情。


Log:我会尝试create a good log file for the install,以确定发生了什么:

msiexec.exe /i C:\Path\Your.msi /L*v C:\Your.log

记录所有 MSI:我个人喜欢为所有 MSI 安装启用日志记录 - 如“ Globally for all setups on a machine" 上面的部分 link.

解释 MSI 日志:有时解释日志文件可能具有挑战性。 .


Reboot Manager:重启管理是一个非常复杂的主题,Windows 具有功能 - 以 the restart manager feature - 通过以 "auto-magical" 方式关闭和重新启动应用程序作为安装的一部分,尝试尽量减少重新启动的需要(应用程序侦听消息并在被告知时优雅地自行关闭,并且系统可能会在安装后重新启动应用程序 - 如果配置为这样做的话)。

Updating your application to comply with the restart manager is the only real fix for such problems that you see, in my opinon.

了解更多关于您的应用程序以及您如何进行升级的信息会很有用,因为:

  1. 您通常会看到一个 FilesInUse 对话框,提示文件正在使用,提示用户将其关闭,但如果安装是静默的则不会。

  2. Visual Studio 设置没有对关闭和重新启动服务的内置支持,因此如果您的应用是一项服务,您将需要额外的工作。

  3. 实际上确实需要替换的文件将提示用户重新启动(如果它们之前没有关闭)以便在重新启动时替换它们。

因此,如果您在 UI 安装中没有看到重新启动请求或 FilesInUse 对话框,则说明发生了其他事情。所以你需要确定:

一个。您确实在进行升级,其中安装项目的版本已经增加,UpgradeCode 是相同的(并且当您增加安装项目的版本时 ProductCode 会发生变化)。您的症状可能是升级不工作的结果,而您看到的只是修复。

b。 "new version" 的定义是您进行了升级,并且二进制文件的文件版本已增加。安装的默认覆盖规则需要递增的文件版本,因此如果它们没有递增,您将看不到任何更新,并且 Windows 不会尝试显示 FilesInUse 对话框或重新启动,因为没有文件需要替换。

这不是问题的解决方案,而是另一种解决方案;最后需要最少工作的那个。

我最终 没有 使用 'Visual Studio Installer Projects' 作为我的安装程序。相反,我查看了 Advanced Installer 可以正常工作 ,没有任何问题。像这样的事情被考虑在内,自定义操作允许更多选项。

如果您的项目是开源的,您可以写信给他们free open source "professional" license, equal to their "professional" plan, which is normally 9(一次性购买)。

根据下面link

https://social.msdn.microsoft.com/Forums/windows/en-US/0b40b367-3341-43d8-b82e-1ace546969f8/how-can-installation-stop-and-restart-existing-service-?forum=winformssetup

“VS 安装中没有很好的支持来停止和启动服务。在安装过程中,问题是自定义操作 运行 在安装完所有内容之后停止正在升级的服务为时已晚或替换。是的,它们的名称类似于“BeforeInstall”,但它们实际上不是在安装之前。“