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

时间:2017-05-23 14:12:41

标签: wix windows-installer burn reboot

我有一个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

这是从它没有重启时(当我通过&#34; / norestart&#34;参数时)

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

如果您想根据/norestart的缺席阻止安装,我非常确定您必须使用自定义Bootstrapper应用程序。

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

答案 1 :(得分:0)

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

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

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