我有一个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
答案 0 :(得分:0)
如您所见,MSI软件包始终被禁止启动重启。
你缺少的是Bootstrapper应用程序(例如WixStdBA或自定义/托管BA)控制重启。
广管局会检查每个MSI套餐的安装结果。如果任何MSI软件包需要重新启动,则Bootstrapper应用程序将启动重新启动(或者,如果用户不允许或者/norestart
交换机已通过等,则启动重启)。
/norestart
命令行开关仅阻止Bootstrapper应用程序在捆绑/链的末尾启动重新启动。
如果您想根据/norestart
的缺席阻止安装,我非常确定您必须使用自定义Bootstrapper应用程序。
但是如果您要使用自定义Bootstrapper应用程序,您也可以只更改默认行为(即将/norestart
设为默认行为。)
答案 1 :(得分:0)
REBOOT属性的默认值不是ReallySuppress,因此正在进行其他操作。没有查看源代码,任何自定义操作,或MSI,很难说这是为什么。完整的详细日志可能会显示正在设置;它可能在MSI的属性表中;它可以从自定义动作代码设置;命令行还有什么?它需要一些侦探工作。
另一个问题是完全静默安装不会要求重启,因为无声意味着它无法询问,因此有些不清楚其他属性的设置,ScheduleReboot可能性等等。我发现使用传统的命令行选项比较容易,例如/ qb等,因为它们往往更明确地说明它们的作用。如果您需要人们解密,请在某处发布完整的详细日志。
抑制重新启动通常不是一个好主意。它们所需的主要原因是文件需要以需要重新启动的方式进行替换。这意味着在下次重新启动之前安装是不完整的,并且如果它使用较旧的文件而不是尚未安装的较新文件,则尝试运行已安装的应用程序可能会导致问题。