我想创建WiX安装程序,它的行为如下所示:-如果它发现程序的实例已经安装并且正在运行,那么它应该将安装推迟到下次重新启动。
如何使用WiX实现这一点?
在我所做的研究之后,我看到了以下可能性:-创建自定义操作,并在程序实例运行时使用MoveFileEx和选项MOVEFILE_DELAY_UNTIL_REBOOT
这是一种好方法,还是应该使用另一种解决方案?
更新1
额外的信息,这是一个小问题。函数::MoveFileEx'需要访问注册表以存储值的权限。
如果dwFlags参数指定MOVEFILE_DELAY_UNTIL_REBOOT,则如果MoveFileEx无法访问注册表,则会失败。函数将重新启动时要重命名的文件的位置存储在以下注册表值中:
发布于 2015-12-07 19:09:23
您可能正在尝试解决Windows已经解决的问题。
(MoveFile似乎无关紧要,因为Windows正在安装这些文件,而不是您。在任何情况下,Windows都会应用版本规则,并且不会用更低的版本来替换现有的版本(如果没有版本,也不会使用相同的文件哈希),因此您已经没有遵循标准的安装规则了。)
如果您安装了安装程序,并且它需要替换该文件或任何其他文件,那么有几种情况是可能的:
将某些内容推迟到下一次重新启动的问题是,这通常需要在注册表的RunOnce键或程序菜单启动文件夹中输入一个条目,并且Windows不希望像这样自动运行提升的程序。有些AV软件也不喜欢写到这些位置。因此,任何需要在重新启动时自动运行提升程序的解决方案都可能会出现问题。
尽管如此,如果您想发明自己的解决方案,我不认为它真的与WiX或有任何关系。您可以编写一个程序来检查其他程序是否正在运行。从运行程序开始安装。如果另一个程序没有运行,启动您的安装,您就完成了。如果该其他程序正在运行,您将在“开始”菜单的“启动”文件夹或RunOnce注册表位置中获取程序,然后在重新启动后重新启动程序,然后再次查看该程序是否正在运行,如果没有,则启动安装,并删除您的“启动/运行”条目。
https://stackoverflow.com/questions/34130242
复制相似问题