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

NSIS v3.08中使用nsUnzip插件持续返回错误码9的问题排查求助

解决NSIS 3.08中nsUnzip插件返回错误码9的问题

结合你描述的现象——NSIS 2.46正常运行、FileOpen能找到文件但插件持续返回错误码9,这大概率是NSIS版本升级后的插件兼容性或路径处理差异导致的,你可以从这几个方向排查:

1. 确认nsUnzip插件是否适配NSIS 3.x

NSIS 3.x对插件API做了不少更新,针对NSIS 2.x编译的旧版nsUnzip插件,可能无法正确处理NSIS 3的参数传递、路径解析逻辑。你需要:

  • 替换为专门为NSIS 3编译的nsUnzip插件版本;
  • 严格匹配编码模式:如果脚本里加了Unicode true,必须使用Unicode编译的插件DLL,否则字符串传递会乱码,导致插件解析路径错误,触发"文件未找到"的错误码9。

2. 检查NSIS 3的插件加载路径

NSIS 3的插件目录逻辑和NSIS 2略有差异,确保插件DLL放在正确位置:

  • 若插件放在脚本本地,需在脚本开头用!addplugindir指定插件目录,比如:
    !addplugindir "${NSISDIR}\Plugins\x86-unicode"
    
  • 或者直接将插件DLL复制到NSIS安装目录下的Plugins\x86-ansi或x86-unicode文件夹(对应你的脚本编码模式),确保NSIS能正确加载到插件。

3. 验证路径传递的正确性

虽然FileOpen能正常识别路径,但nsUnzip插件对路径的处理可能和NSIS内置命令有差异:

  • 尝试使用绝对路径传递给nsUnzip,先用GetFullPathName把相对路径转成绝对路径:
    GetFullPathName "your_archive.zip" $0
    nsUnzip::Extract "$0" "target_dir"
    
  • 用MessageBox MB_OK "$0"或DetailPrint "$0"输出路径,确认和FileOpen使用的路径完全一致,避免因空格、特殊字符转义问题导致插件识别失败。

4. 开启NSIS 2兼容模式

NSIS 3提供了兼容NSIS 2的选项,你可以在脚本开头添加:

!define NSIS_LEGACY_V2_COMPAT

某些旧插件依赖NSIS 2的行为模式,开启兼容后可能解决路径解析的问题。

5. 简化脚本调试

如果以上方法都无效,建议简化脚本排查:

  • 只保留nsUnzip的核心调用逻辑,排除其他代码的干扰;
  • 换一个简单的测试压缩包(比如仅包含1-2个文件的zip),排除压缩包本身的格式问题;
  • 在调用nsUnzip前后用DetailPrint输出所有参数,确认传递的路径和目标目录无误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:22:27