使用NSIS取消注册字体

时间:2016-12-15 10:06:20

标签: nsis

当我尝试卸载这样的字体时......

Section "un.Uninstall"
    StrCpy $FONT_DIR $FONTS
    !insertmacro RemoveTTFFont "$FONTS\Vani.ttf"
    !insertmacro RemoveTTFFont "$FONTS\Vanib.ttf"
    SendMessage ${HWND_BROADCAST} ${WM_FONTCHANGE} 0 0 /TIMEOUT=5000
SectionEnd

我收到以下错误消息:

Error in macro GetFileNameCall on macroline 2
Error in macro RemoveTTFFont on macroline 9
(...) aborting process

换句话说,FontReg.nsh文件中的以下部分出现了问题:

!ifmacrondef GetFileNameCall
   !macro GetFileNameCall _PATHSTRING _RESULT
        Push `${_PATHSTRING}`
        Call GetFileName
        Pop ${_RESULT}
   !macroend
!endif

!ifndef GetFileName
   !define GetFileName `!insertmacro GetFileNameCall`    
    Function GetFileName
        Exch $0
        Push $1
        Push $2    
        StrCpy $2 $0 1 -1
        StrCmp $2 '\' 0 +3
        StrCpy $0 $0 -1
        goto -3    
        StrCpy $1 0
        IntOp $1 $1 - 1
        StrCpy $2 $0 1 $1
        StrCmp $2 '' end
        StrCmp $2 '\' 0 -3
        IntOp $1 $1 + 1
        StrCpy $0 $0 '' $1    
        end:
        Pop $2
        Pop $1
        Exch $0
    FunctionEnd
!endif

有人,如果不告诉我如何解决这个问题,至少可以指出我正确的方向吗? 这对社区很有用,因为很多人都有这个问题,但还没有人解决它,就像这里一样 - http://forums.winamp.com/showthread.php?t=245701

1 个答案:

答案 0 :(得分:0)

遗憾的是,我没有收到任何答案,但我必须分享我提出的解决方案,因为我看到很多人遇到了同样的问题。

宏中有一个删除字体的错误,即“RemoveTTF”,“RemoveTTFFont”以及以下文件中类似的声音:FontReg.nsh,FontRegAdv.nsh。所有这些都使用名为“GetFileNameCall”的相同函数,这会导致错误。这个函数的问题是它将“FontName”和“FontFileName”看作同一个项目!事实上,字体文件名与字体名不同。我通过从FontRegAdv.nsh复制所需的代码并用实际的字体文件名和字体名替换FontFileName和FontName变量来解决了这个问题。