如何在电子构建的应用程序中启用取消按钮?
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)。
我正在使用通过 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)。