使用 NSIS 注销字体
Deregistering a font with 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 [=12=]
Push
Push
StrCpy [=12=] 1 -1
StrCmp '\' 0 +3
StrCpy [=12=] [=12=] -1
goto -3
StrCpy 0
IntOp - 1
StrCpy [=12=] 1
StrCmp '' end
StrCmp '\' 0 -3
IntOp + 1
StrCpy [=12=] [=12=] ''
end:
Pop
Pop
Exch [=12=]
FunctionEnd
!endif
如果有人不能告诉我如何修复该错误,至少可以指出正确的方向吗?
这对社区很有用,因为很多人都遇到过这个问题,但还没有人解决它,就像这里一样 - http://forums.winamp.com/showthread.php?t=245701
不幸的是,我没有收到任何答案,但我必须分享我想出的解决方案,因为我看到很多人都有同样的问题。
删除字体的宏中存在错误,即 "RemoveTTF"、"RemoveTTFFont" 和以下文件中发音相似的字体:FontReg.nsh、FontRegAdv.nsh。它们都使用导致错误的名为 "GetFileNameCall" 的相同函数。这个函数的问题是它将"FontName"和"FontFileName"视为同一个项目!事实上,字体文件名与字体名称不同。我通过从 FontRegAdv.nsh 复制所需的代码并将 FontFileName 和 FontName 变量替换为实际的字体文件名和字体名称来解决这个问题。
当我尝试卸载这样的字体时...
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 [=12=]
Push
Push
StrCpy [=12=] 1 -1
StrCmp '\' 0 +3
StrCpy [=12=] [=12=] -1
goto -3
StrCpy 0
IntOp - 1
StrCpy [=12=] 1
StrCmp '' end
StrCmp '\' 0 -3
IntOp + 1
StrCpy [=12=] [=12=] ''
end:
Pop
Pop
Exch [=12=]
FunctionEnd
!endif
如果有人不能告诉我如何修复该错误,至少可以指出正确的方向吗? 这对社区很有用,因为很多人都遇到过这个问题,但还没有人解决它,就像这里一样 - http://forums.winamp.com/showthread.php?t=245701
不幸的是,我没有收到任何答案,但我必须分享我想出的解决方案,因为我看到很多人都有同样的问题。
删除字体的宏中存在错误,即 "RemoveTTF"、"RemoveTTFFont" 和以下文件中发音相似的字体:FontReg.nsh、FontRegAdv.nsh。它们都使用导致错误的名为 "GetFileNameCall" 的相同函数。这个函数的问题是它将"FontName"和"FontFileName"视为同一个项目!事实上,字体文件名与字体名称不同。我通过从 FontRegAdv.nsh 复制所需的代码并将 FontFileName 和 FontName 变量替换为实际的字体文件名和字体名称来解决这个问题。