繁体   English   中英

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

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

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

我发现使用安装程序项目的“自定义操作”来运行关闭应用程序的脚本无济于事,因为替换文件之前没有调用任何操作。

有没有一种好方法可以确保在文件应该被覆盖之前终止打开/锁定的文件?

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

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

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

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

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

因此,如果您在 UI 安装中没有看到重新启动请求或 FilesInUse 对话框,那么其他事情正在发生。 因此,您需要确保:

一种。 您实际上是在进行升级,其中安装项目的版本已增加,UpgradeCode 是相同的(当您增加安装项目的版本时,ProductCode 会发生变化)。 您的症状可能是升级无法正常工作的结果,而您看到的只是修复。

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

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

我最终没有为我的安装程序使用“Visual Studio 安装程序项目”。 相反,我看了高级安装,刚刚没有问题的作品 像这样的事情被考虑在内,自定义操作允许更多选项。

如果您的项目是开源的,您可以写信给他们关于免费的开源“专业”许可证,相当于他们的“专业”计划,通常为 399 美元(一次性购买)。

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

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

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

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


日志:我会尝试 为安装创建一个好的日志文件,以确定发生了什么:

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

记录所有 MSI :我个人喜欢为所有 MSI 安装启用日志记录 - 如上述链接中的“ Globally for all setups on a machine ”部分所述。

解释 MSI 日志:有时解释日志文件可能具有挑战性。 这是一个带有一些链接的答案,可以帮助解决这个问题


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

在我看来,更新您的应用程序以符合重新启动管理器是您看到的此类问题的唯一真正解决方案

根据以下链接

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 安装中没有很好的支持来停止和启动服务。在安装过程中,问题是自定义操作在安装完所有内容后运行,因此停止您正在升级或替换的服务为时已晚。是的,它们的名称类似于“安装前”,但它们确实不是安装前。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM