如何正确使用NSIS解压插件?

如何正确使用NSIS解压插件?,nsis,unzip,Nsis,Unzip,我是NSIS编程新手,所以我找到了NSISUNZ插件来提取文件 这是我的代码: OutFile "TEst.exe" Section !addplugindir nsisunz initPluginsDir nsisunz::Unzip "C:\Users\user\Downloads\TestVerzeichnis.zip" "C:\Users\user\Downloads" SectionEnd 我没有得到一个错误或什么,但该文件没有得到提取。 为了安装插件,我刚刚将.dll文件解压缩到p

我是NSIS编程新手,所以我找到了NSISUNZ插件来提取文件

这是我的代码:

OutFile "TEst.exe"
Section
!addplugindir nsisunz
initPluginsDir
nsisunz::Unzip "C:\Users\user\Downloads\TestVerzeichnis.zip" "C:\Users\user\Downloads"
SectionEnd
我没有得到一个错误或什么,但该文件没有得到提取。 为了安装插件,我刚刚将.dll文件解压缩到plugins文件夹中

我做错了什么


感谢您回答

如果输出只是一个字母,那么您很可能在Ansi安装程序中使用Unicode版本的插件

理想情况下,您应该使用NSIS v3创建Unicode安装程序:

  • 将插件移动到根插件文件夹中的Unicode插件子文件夹
  • Unicode True
    添加到.NSI
  • 如果您仍在使用NSIS v2,则需要找到插件的不同版本,很可能是wiki上的另一个文件

    Unicode True
    !addplugindir /x86-unicode "$%userprofile%\Downloads\Nsisunz\Plugin unicode"
    
    !include LogicLib.nsh
    Function SplitWrite
    Pop $2
    StrCpy $3 ""
    StrCpy $4 0
    loop:
        StrCpy $5 $2 1 $4
        ${If} $5 == "|"
        ${OrIf} $5 == ""
            IntOp $6 $4 - 2
            StrCpy $6 $2 2 $6
            FileWriteByte $1 "0x$6"
        ${EndIf}
        IntOp $4 $4 + 1
        StrCmp $5 "" 0 loop
    FunctionEnd
    
    Section
    InitPluginsDir
    ; Create a example .zip file 
    FileOpen $1 "$PluginsDir\test.zip" w
    Push 50|4B|03|04|0A|00|00|00|00|00|AC|BA|93|50
    Call SplitWrite
    Push F8|06|53|6B|08|00|00|00|08|00|00|00|08|00|00|00|54|65|73|74|2E|74|78|74|48|65|6C|6C|6F|20|0D|0A|50|4B|01|02|3F|00|0A|00|00|00|00|00|AC|BA|93|50
    Call SplitWrite
    Push F8|06|53|6B|08|00|00|00|08|00|00|00|08|00|24|00|00|00|00|00|00|00|20|20|00|00|00|00|00|00|54|65|73|74|2E|74|78|74|0A|00|20|00|00|00|00|00|01|00|18|00
    Call SplitWrite
    Push D6|75|96|79|90|16|D6|01|96|4F|96|79|90|16|D6|01|96|4F|96|79|90|16|D6|01|50|4B|05|06|00|00|00|00|01|00|01|00|5A|00|00|00|2E|00|00|00|00|00
    Call SplitWrite
    FileClose $1
    
    CreateDirectory "$PluginsDir\TestDir"
    nsisunz::Unzip "$PluginsDir\test.zip" "$PluginsDir\TestDir"
    Pop $0
    DetailPrint $0 ; "success"
    ${If} $0 == "success"
        FileOpen $1 "$PluginsDir\TestDir\Test.txt" r
        FileRead $1 $2
        FileClose $1
        DetailPrint $2 ; "Hello"
    ${EndIf}
    
    SectionEnd
    

    您正在构建Ansi或Unicode安装程序吗?您没有使用
    Pop$0
    获得结果!现在增加了0美元。它只是在输出控制台中显示“E”+“completed”可能是我安装插件时出错了?好的,谢谢在添加“Unicode True”之后,它至少会显示:“打开Zip文件时出错”。我使用的是NSISWorld的v3。可能是.Zip有问题,或者路径不正确?请仔细检查路径和文件,两者都可以。所以我不知道我的代码出了什么问题对我来说很好,我将添加一个示例。