installation - NSIS 在静默模式下安装后弹出对话框/消息
问题描述
我有一个 NSIS 安装程序设置为在静默模式下运行。这很好用。
安装完成后,我收到了客户要求弹出信息的请求……但仍然希望安装程序部分保持静音!
我意识到这是违反直觉的。
话虽这么说,安装结束时是否可以覆盖静音?
我目前在 .nsi 脚本的开头设置了下面的安装程序属性
SilentInstall silent
解决方案
您可以打开或关闭静音模式.onInit
,SetSilent
但一旦该函数返回,UI 模式将无法更改。
简单的解决方案是简单地在最后一个末尾使用横幅或Splash插件之一Section
来显示消息/图像。
或者,您可以使用仅显示进度条的最小 UI 创建假静音模式:
!include LogicLib.nsh
Var Silent
Function .onInit
${If} ${Silent}
SetSilent Normal ; Turn off real silent mode
SetAutoClose True
StrCpy $Silent 1 ; Fake silent mode
${EndIf}
FunctionEnd
Page Components SkipPageIfSilent
Page Directory SkipPageIfSilent
Page InstFiles "" TweakInstfilesPage
Function SkipPageIfSilent
IntCmp $Silent 0 +2
Abort
FunctionEnd
Function TweakInstfilesPage
${If} $Silent <> 0
SetSilent Silent ; Make IfSilent return true
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $0 $0 0x403 ; Show details button
ShowWindow $0 0
System::Call 'USER32::GetWindowRect(p$0,@r1)' ; NSIS v3+
System::Call 'USER32::GetWindowRect(p$HWNDPARENT,@r2)' ; NSIS v3+
System::Call '*$1(i,i.r3,i,i)'
System::Call '*$2(i.r5,i.r6,i.r7,ir3r8)'
IntOp $5 $7 - $5 ; Width
IntOp $6 $8 - $6 ; Height
System::Call 'USER32::SetWindowPos(p$HWNDPARENT,p,i,i,ir5,ir6,i0x12)'
SetDetailsView Hide
${EndIf}
FunctionEnd
Section
Sleep 333
Sleep 333
Sleep 333
Sleep 333
SectionEnd
推荐阅读
- pip - Win10 Python 3.8.1 64bit 安装 spaCy 的构建依赖项失败
- java - Lombok 访问 jdk.compiler 的内部包与 Java-16 不兼容
- laravel - laravel/fortify 密码哈希中使用了哪种方法?
- python - 将概率传递给 seaborn kdeplot
- c - 我找不到分段错误的原因
- python - 美丽的汤/硒网页抓取
- python - 从文本文件创建文件夹
- flutter - Firestore中状态更改的问题与switch和flutter true和false
- queue - printf 从各种任务中进行控制台
- javascript - 如何将 JS 生成的按钮附加到 div 而不是正文