You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动忽略NSIS安装器字体安装错误并记录错误信息

解决NSIS字体安装错误弹窗并记录错误信息的方案

要实现忽略字体安装环节的错误弹窗但保留错误日志,我们可以通过NSIS的错误控制命令调整错误处理行为,同时捕获每个步骤的错误并输出到安装日志中。以下是具体的实现步骤和修改后的代码:

核心思路

  1. 临时关闭错误弹窗:在字体安装代码段开始前,保存当前的错误弹窗设置,然后禁用默认的错误提示框,避免失败时弹出干扰用户的窗口。
  2. 捕获每一步的错误:对字体复制、注册表写入、DLL调用等每个可能失败的操作,检查错误状态并通过DetailPrint记录具体的错误信息。
  3. 恢复原有错误设置:字体安装完成后,恢复之前的错误弹窗配置,不影响安装器其他部分的错误处理。

修改后的完整代码

; 保存当前错误对话框的状态,后续恢复
GetErrorDialogs $R1
; 关闭NSIS默认的错误弹窗
SetErrorDialogs off

SetOverwrite ifnewer
File ".\target\fonts\*.*"
; 检查文件复制是否出错
IfErrors 0 +2
DetailPrint "[Font Install Error] Failed to copy font files to target directory"

; 写入Arial Narrow字体注册表项并检查错误
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "Arial Narrow (TrueType)" "arialn.ttf"
IfErrors 0 +2
DetailPrint "[Font Install Error] Failed to register 'Arial Narrow (TrueType)' in registry"

WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "Arial Narrow Bold (TrueType)" "arialnb.ttf"
IfErrors 0 +2
DetailPrint "[Font Install Error] Failed to register 'Arial Narrow Bold (TrueType)' in registry"

WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "Arial Narrow Bold Italic (TrueType)" "arialnbi.ttf"
IfErrors 0 +2
DetailPrint "[Font Install Error] Failed to register 'Arial Narrow Bold Italic (TrueType)' in registry"

WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "Arial Narrow Italic (TrueType)" "arialni.ttf"
IfErrors 0 +2
DetailPrint "[Font Install Error] Failed to register 'Arial Narrow Italic (TrueType)' in registry"

GetTempFileName $R0
File /oname=$R0 ".\target\additions\fonts.dll"
; 检查fonts.dll提取是否出错
IfErrors 0 +2
DetailPrint "[Font Install Error] Failed to extract fonts.dll to temporary location"

; 注册每个字体并检查错误
Push "arialn.ttf"
CallInstDLL $R0 registerFont
IfErrors 0 +2
DetailPrint "[Font Install Error] Failed to register font file: arialn.ttf"

Push "arialnb.ttf"
CallInstDLL $R0 registerFont
IfErrors 0 +2
DetailPrint "[Font Install Error] Failed to register font file: arialnb.ttf"

Push "arialnbi.ttf"
CallInstDLL $R0 registerFont
IfErrors 0 +2
DetailPrint "[Font Install Error] Failed to register font file: arialnbi.ttf"

Push "arialni.ttf"
CallInstDLL $R0 registerFont
IfErrors 0 +2
DetailPrint "[Font Install Error] Failed to register font file: arialni.ttf"

; 恢复之前的错误对话框设置
SetErrorDialogs $R1
SetOverwrite on
DetailPrint "Fonts installation process completed (errors logged above if any)"

代码说明

  • GetErrorDialogs $R1:保存当前的错误弹窗状态,确保后续能恢复到原有配置。
  • SetErrorDialogs off:禁用NSIS内置的错误弹窗,这样即使操作失败也不会弹出提示框。
  • IfErrors 0 +2:NSIS原生命令,检查上一步操作是否出错。如果没有错误(0),则跳过下一行(+2表示跳转到当前行之后的第二行);如果出错,则执行下一行的DetailPrint记录错误。
  • 每个操作后添加的DetailPrint:会把具体的错误信息输出到安装日志中,你可以通过安装时的详细信息面板查看这些日志。

这样修改后,字体安装环节的错误不会再弹出干扰用户的窗口,但所有错误都会被记录下来,方便后续排查问题。

内容的提问来源于stack exchange,提问作者victorio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:19:32