只需要添加下面一段代码即可,每句代码的意思已经备注在后面,应该挺清楚的。
Function .onVerifyInstDir
StrCpy $0 $INSTDIR ;$0存放安装路径
StrLen $1 $0 ;获取$0的长度,存在$1里
StrCpy $2 ''
; 每个中文会给strlen增加2,所以copy 1个字符时,会遇到不可显示字符,会被NSIS自动改成?
; 正好?本身是非法路径,所以可以用这个来判断路径是否非法
${Do}
IntOp $1 $1 - 1 ;开始循环,$1 = $1 - 1
${IfThen} $1 < 0 ${|}${ExitDo}${|} ;遍历结束,退出
StrCpy $2 $0 1 $1 ;从第$1位开始,最多从$0中取1位,存在$2中
${IfThen} $2 == '?' ${|}${ExitDo}${|} ;$2 为 '?' 退出循环
${Loop}
${If} $2 == '?'
Abort ; 如果 $INSTDIR 含有中文等宽字节字符,则不让用户安装在这里
${EndIf}
FunctionEnd

本文介绍了一段用于NSIS安装脚本的代码,该代码能够检测安装路径是否包含中文字符,若路径非法则阻止安装。通过使用字符串操作和循环判断,确保了软件在不支持的路径下不会被错误安装。

2527

被折叠的 条评论
为什么被折叠?



