首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >推迟在WiX中安装

推迟在WiX中安装
EN

Stack Overflow用户
提问于 2015-12-07 09:28:20
回答 1查看 214关注 0票数 0

我想创建WiX安装程序,它的行为如下所示:-如果它发现程序的实例已经安装并且正在运行,那么它应该将安装推迟到下次重新启动。

如何使用WiX实现这一点?

在我所做的研究之后,我看到了以下可能性:-创建自定义操作,并在程序实例运行时使用MoveFileEx和选项MOVEFILE_DELAY_UNTIL_REBOOT

这是一种好方法,还是应该使用另一种解决方案?

更新1

额外的信息,这是一个小问题。函数::MoveFileEx'需要访问注册表以存储值的权限。

如果dwFlags参数指定MOVEFILE_DELAY_UNTIL_REBOOT,则如果MoveFileEx无法访问注册表,则会失败。函数将重新启动时要重命名的文件的位置存储在以下注册表值中:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-07 19:09:23

您可能正在尝试解决Windows已经解决的问题。

(MoveFile似乎无关紧要,因为Windows正在安装这些文件,而不是您。在任何情况下,Windows都会应用版本规则,并且不会用更低的版本来替换现有的版本(如果没有版本,也不会使用相同的文件哈希),因此您已经没有遵循标准的安装规则了。)

如果您安装了安装程序,并且它需要替换该文件或任何其他文件,那么有几种情况是可能的:

  1. 它将显示一个正在使用的文件对话框。您可以告诉人们忽略它,直到他们完成程序,然后关闭它通过点击“重试”,他们继续安装,不需要重新启动。安装被有效地挂起,直到他们完成程序。
  2. 它将显示一个文件正在使用的对话框,您告诉他们点击忽略,所以安装将继续,并在最后可能要求重新启动。用户推迟重新启动,直到他们完成程序。
  3. 禁止文件正在使用对话框,如果需要重新启动,它将要求在结束时,没有文件在使用对话框显示,只是一个重新启动的请求,用户做好准备。

将某些内容推迟到下一次重新启动的问题是,这通常需要在注册表的RunOnce键或程序菜单启动文件夹中输入一个条目,并且Windows不希望像这样自动运行提升的程序。有些AV软件也不喜欢写到这些位置。因此,任何需要在重新启动时自动运行提升程序的解决方案都可能会出现问题。

尽管如此,如果您想发明自己的解决方案,我不认为它真的与WiX或有任何关系。您可以编写一个程序来检查其他程序是否正在运行。从运行程序开始安装。如果另一个程序没有运行,启动您的安装,您就完成了。如果该其他程序正在运行,您将在“开始”菜单的“启动”文件夹或RunOnce注册表位置中获取程序,然后在重新启动后重新启动程序,然后再次查看该程序是否正在运行,如果没有,则启动安装,并删除您的“启动/运行”条目。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34130242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档