2017-05-23 239 views
0

我有一个wix捆绑安装各种模块。其中的一个模块会导致系统重新启动。现在我想要发生的一种情况是,如果它是UI安装,那么在安装捆绑包的最后我想提示出现,如果它是静默安装,那么我想避免自动重启,因为用户可能不知道安装会导致重新启动。Wix刻录安装程序没有重启静默安装

我看了各种线程和选项,发现我可以通过一个“/ 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

回答

0

正如你已经发现,MSI软件包总是从开始重新启动抑制。

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

BA检查每个MSI软件包的安装结果。如果任何MSI软件包需要重新启动,引导程序应用程序将启动重新引导(或者,如果用户不允许它或/norestart开关被传递等)。

命令行开关/norestart只能防止引导程序应用程序在程序包/链的末尾启动重新引导。

我敢肯定,如果您想根据缺少/norestart来阻止安装,您必须使用自定义引导程序应用程序。

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

0

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

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

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