如何在电子构建的应用程序中启用取消按钮?

How can I enable the cancel button in an electron-built application?

我正在使用通过 electron-builder 构建的 electron 应用程序。当我生成安装程序并开始安装时,我看到取消按钮被禁用。

我查看了一些 electron builder 文档并进行了一些 google 搜索,但我似乎在这里一片空白。

edit: 发现我可以使用build/installer.nsh 实际修改UI 元素,现在我只是想知道,我如何获得访问按钮以启用/禁用它,我看到的示例使用 .ini 文件来存储选项或类似的东西,但我收到了使用 nsDialogs 的建议。

nsDialogs 是我已经可以轻松访问的东西吗?还是我需要将某些东西导入我的 installer.nsh 文件才能使用 nsDialogs?

因此,我将如何访问 nsDialogs 中的取消按钮?

是否有可配置的值使我能够...启用取消按钮以便用户可以在安装期间选择取消?

谢谢!

NSIS 安装程序不支持在您进入 InstFiles 页面(或之后的任何页面)时取消安装。这是设计使然,因为脚本语言的工作方式。

如果您不介意黑客攻击,您可以在安装阶段用户单击取消时调用卸载程序:

Var Cancel
!include LogicLib.nsh
!include WinMessages.nsh

Function .onUserAbort
    StrCmp $Cancel "" +3
        IntOp $Cancel $Cancel | 1
        Abort
FunctionEnd

!macro FakeWork c
!if "${c}" < 10
Sleep 333
DetailPrint .
!define /redef /math c "${c}" + 1
!insertmacro ${__MACRO__} "${c}"
!endif
!macroend

Section Uninstall
!insertmacro FakeWork 0
Delete "$InstDir\Uninst.exe"
RMDir "$InstDir"
SectionEnd

Function CheckCancel
${If} $Cancel = 1
    IntOp $Cancel $Cancel + 1
    GetDlgItem [=10=] $hwndParent 2
    EnableWindow [=10=] 0
    DetailPrint "Canceling..."
    SetDetailsPrint none
    ExecWait '"$InstDir\Uninst.exe" /S _?=$InstDir'
    Delete "$InstDir\Uninst.exe"
    RMDir "$InstDir"
    SetDetailsPrint both
    Quit
${EndIf}
FunctionEnd


Section
SetOutPath $InstDir
WriteUninstaller "$InstDir\Uninst.exe"
StrCpy $Cancel 0 ; Allow special cancel mode
GetDlgItem [=10=] $hwndParent 2
EnableWindow [=10=] 1 ; Enable cancel button

!insertmacro FakeWork 0 ; Replace these with File or other instructions
Call CheckCancel
!insertmacro FakeWork 0
Call CheckCancel
!insertmacro FakeWork 0
Call CheckCancel

StrCpy $Cancel "" ; We are done, ignore special cancel mode
SectionEnd

(我不知道如何将它与 electron-builder 集成,抱歉)

如果您想要一个正确的回滚安装程序,请尝试 Inno Setup or WiX (MSI)。