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

3
我正在使用通过electron-builder构建的Electron应用程序。当我生成安装程序并开始安装时,我发现取消按钮被禁用。
我查看了一些electron builder文档并进行了一些谷歌搜索,但在这里似乎没有找到解决办法。
编辑:发现我可以使用build/installer.nsh实际修改UI元素,现在我只想知道如何访问该按钮以启用/禁用它,我看到的示例使用.ini文件存储选项或类似内容,但我得到了使用nsDialogs的建议。
nsDialogs是否已经可轻松访问,还是我需要导入某些东西到我的installer.nsh文件中才能使用nsDialogs?
通过这种方式,我如何访问nsDialogs中的取消按钮?
是否有可配置的值可以使我启用取消按钮,以便用户可以在安装期间选择取消?
谢谢!

你想要更改执行安装的页面吗? - Anders
不算真的,没有。我只是有一个默认页面来确认用户想要安装,然后另外一个页面显示进度条来安装应用程序。底部应该有一个启用的“取消”按钮,而不是当前情况下取消按钮一直被禁用。 - Morklympious
你想修改这两个页面中的哪一个? - Anders
抱歉,让我更好地解释一下:当我打开我的构建安装程序时,会出现一个视图询问我安装的目标文件夹在哪里,底部有[安装]和[取消]按钮,两个按钮都是启用的并且可按。我按[安装]。底部变成3个按钮:[返回]、[下一步]和[取消],同时在安装程序窗口主体中显示安装进度表。我想改变这个第二个视图,使得[取消]可以被点击并且能够在安装过程中取消安装。我目前无法做到这一点。这样有帮助吗? - Morklympious
1个回答

2

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

如果您不介意使用hack,您可以在安装阶段用户点击取消时调用卸载程序:

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 $0 $hwndParent 2
    EnableWindow $0 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 $0 $hwndParent 2
EnableWindow $0 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 SetupWiX(MSI)。


坦白地说,这是一个很好的回答,基本上回答了我的问题,因为看起来我不能按照设计实现我想要的东西。非常感谢您的来往交流!接受我的赞誉吧。 - Morklympious

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接