关于 Windows 安装程序:在 WiX 引导程序链之后显示和启用重新启动文本和按钮

Show and enable reboot text and button after WiX bootstrapper chain

基本上,我想让用户在设置链完成后轻松重启他/她的机器。仅仅在最后一个链元素之后使用 <ExitCode ... 对我来说是没有选择的,因为我不想强制用户重新启动并且我的最后一个元素是 MsiPackage,我只是想给用户重新启动的选项,非常快。

当然我可以在 Msi 本身中实现这个功能,但我也在引导程序的主题文件中找到了这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<Page Name="Success">
    <Text X="186"
                Y="80"
                Width="-11"
                Height="30"
                FontId="2"
                DisablePrefix="yes">#(loc.SuccessHeader)</Text>
    <Button Name="LaunchButton"
                    X="-91"
                    Y="-11"
                    Width="75"
                    Height="23"
                    TabStop="yes"
                    FontId="0"
                    HideWhenDisabled="yes">#(loc.SuccessLaunchButton)</Button>
    <Text Name="SuccessRestartText"
                X="186"
                Y="-51"
                Width="-11"
                Height="32"
                FontId="3"
                DisablePrefix="yes"
                HideWhenDisabled="yes">#(loc.SuccessRestartText)</Text>
    <Button Name="SuccessRestartButton"
                    X="-116"
                    Y="-11"
                    Width="100"
                    Height="23"
                    TabStop="yes"
                    FontId="0"
                    HideWhenDisabled="yes">#(loc.SuccessRestartButton)</Button>
    <Button Name="SuccessCancelButton"
                    X="-11"
                    Y="-11"
                    Width="100"
                    Height="23"
                    TabStop="yes"
                    FontId="0">#(loc.SuccessCloseButton)</Button>
</Page>

你看,有一个RestartText 和RestartButton。删除 HideWhenDisabled 后,我可以看到设置后的元素,但显然它们仍然被禁用。

虽然在 wxs 文件中的 bal:WixStandardBootstrapperApplication 节点中有一个 SupressRepair 标签来禁用和隐藏修复按钮和功能,但甚至必须有任何选项来启用重启文本、按钮和功能。

我无法确定在哪里设置它。那么,如何在 bootstrap 应用程序中设置后启用重启文本和按钮。

感谢您的建议。


显然,我的解决方案非常简单,在安装 MSI 后尝试重新启动时我自己可以检测到:

当通过应用告诉 MSI 包在成功安装后重新启动时

1
2
3
<InstallExecuteSequence>
    <ScheduleReboot After="InstallFinalize"/>
</InstallExecuteSequence>

到我的 MSI 项目的 wxs 文件中,它不会导致 MSI 在安装链中的安装后重新启动。取而代之的是,它将为引导程序提供任何返回代码,以便在整个设置链的末尾启用我的重新启动文本和按钮。

没想到引导程序这么聪明。不错!