NSIS启动前检测字体缺失,静默安装字体


!include "WinMessages.nsh"
; 要求管理员权限
RequestExecutionLevel admin

!macro InstallSingleFont FILE_NAME DISPLAY_NAME
    ; 生成唯一标签
    !define UNIQUE_FONT_DONE "font_done_${__LINE__}"

    ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "${DISPLAY_NAME}"
    StrCmp $R0 "" 0 ${UNIQUE_FONT_DONE}

    SetOutPath "$TEMP"
    File "Fonts\${FILE_NAME}"
    CopyFiles "$TEMP\${FILE_NAME}" "$WINDIR\Fonts\${FILE_NAME}"
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "${DISPLAY_NAME}" "${FILE_NAME}"

    ${UNIQUE_FONT_DONE}:
    !undef UNIQUE_FONT_DONE
!macroend

; 安装初始化(在显示UI之前执行)
Function .onInit
    ; 调用卸载旧版本函数
    ;Call UninstallOldVersion

    ; 其他初始化操作(如检测权限、设置安装路径等)
    ; ...
	Call DoInstallationFonts
FunctionEnd


Function DoInstallationFonts
    !insertmacro InstallSingleFont "SourceHanSansCN-Regular.ttf" "Source Han Sans CN (TrueType)"
    !insertmacro InstallSingleFont "SegoeUI.ttf" "Segoe UI (TrueType)"
    ; 不会再冲突
FunctionEnd

posted @ 2025-11-12 14:10  Timskt  阅读(6)  评论(0)    收藏  举报