Wix刻录安装程序无法在静默安装时重新启动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wix刻录安装程序无法在静默安装时重新启动相关的知识,希望对你有一定的参考价值。

我有一个wix包,可以安装各种模块。其中一个模块可能导致系统重启。现在我希望发生的方式是,如果它是一个UI安装,那么在安装捆绑包的最后我想要一个提示出现,如果它是一个静默安装,那么我想避免自动重启用户可能不知道安装会导致重启。

我查看了各种线程和选项,发现我可以传递一个“/ norestart”参数进行静默安装,这样就可以不进行自动重启。因此,如果用户未传递“/ norestart”参数并且仅在传递该参数时允许,则我希望失败静默安装。我希望“/ norestart”映射到REBOOT(https://msdn.microsoft.com/en-us/library/windows/desktop/aa371101(v=vs.85).aspx)的特定值,但我观察到的是无论我是否传递“/ norestart”参数,日志中REBOOT的值总是如此“ReallySuppress”但它在参数传递时不会自动重启,并在未传递参数时重新启动。我真的很困惑它是如何确定它以及我应该如何以编程方式确定它。

这是重新启动时其中一个组件的日志(当我没有传递“/ norestart”参数时)

Command Line: ALLUSERS=1 ARPSYSTEMCOMPONENT=1 MSIFASTINSTALL=7 CWD=<...> REBOOT=ReallySuppress CURRENTDIRECTORY=<...> CLIENTUILEVEL=3 MSICLIENTUSESEXTERNALUI=1 CLIENTPROCESSID=2240

这是从它不重启时(当我传递“/ norestart”参数时)

Command Line: ALLUSERS=1 ARPSYSTEMCOMPONENT=1 MSIFASTINSTALL=7 CWD=<...> REBOOT=ReallySuppress CURRENTDIRECTORY=<...> CLIENTUILEVEL=3 MSICLIENTUSESEXTERNALUI=1 CLIENTPROCESSID=1984

任何帮助或指示表示赞赏。如果您希望我提供更多信息或者某些事情不清楚,请告诉我。在此先感谢您的时间。

参考:https://msdn.microsoft.com/en-us/library/windows/desktop/aa372024(v=vs.85).aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/aa371101(v=vs.85).aspx

答案

如您所见,MSI软件包始终被禁止启动重新启动。

你缺少的是Bootstrapper应用程序(例如WixStdBA或自定义/托管BA)控制重启。

BA检查每个MSI包的安装结果。如果任何MSI软件包需要重新启动,则Bootstrapper应用程序将启动重新启动(或者,如果用户不允许或者通过了/norestart交换机,则启动重启)。

/norestart命令行开关仅阻止Bootstrapper应用程序在捆绑/链的末尾启动重新启动。

如果你想根据缺少/norestart来阻止安装,我很确定你必须使用自定义Bootstrapper应用程序。

但是,如果您要使用自定义Bootstrapper应用程序,您可能只需更改默认行为(即使/norestart成为默认行为)。

另一答案

REBOOT属性的默认值不是ReallySuppress,因此正在进行其他操作。没有查看源代码,任何自定义操作,或MSI,很难说这是为什么。完整的详细日志可能会显示正在设置;它可能在MSI的属性表中;它可以从自定义动作代码设置;命令行还有什么?它需要一些侦探工作。

另一个问题是完全静默安装不会要求重新启动,因为静默意味着它无法询问,因此有些不清楚其他属性的设置,ScheduleReboot可能性等等。我发现使用传统的命令行选项比较容易,例如/ qb等,因为它们往往更明确地说明它们的作用。如果您需要人们解密,请在某处发布完整的详细日志。

抑制重新启动通常不是一个好主意。它们所需的主要原因是文件需要以需要重新启动的方式进行替换。这意味着在下次重新启动之前安装是不完整的,并且如果它使用较旧的文件而不是尚未安装的较新文件,则尝试运行已安装的应用程序可能会导致问题。

以上是关于Wix刻录安装程序无法在静默安装时重新启动的主要内容,如果未能解决你的问题,请参考以下文章

wix 刻录安装程序要求

Wix静默安装MSI我们可以停止创建目录吗

带有自定义 /a 参数的 WiX 引导程序静默安装

Wix:在 Wix 之外运行命令时,运行外部 InstallShield 安装程序失败,退出代码为 -3

在 WiX 中重新启动后继续安装

Wix安装程序:无法等待子连接到管道