文章搜索: 分类 关键字
内容1载入中...内容2载入中...内容3载入中...
您的位置:首页编程开发安装制作 → 于打破 NSIS 的 8192 字节限制的更简单方法
于打破 NSIS 的 8192 字节限制的更简单方法
日期:2007-2-8 20:29:15 人气:     [ ]
推荐本页:
    上次那个要做一个插件,花去了二十几个 KB,对于更加节省资源,这里提供一个更简单的方法,无需插件。生成安装文件更加的小。
    看来偶的功力还有待提升,否则每次做无用功,还真是无趣呢~~  
    引用 Setup.nsi 发表于 2005-5-18 的内容:
    以下是代码片段:
    /*----------------------------------------------/
    / 关于 NSIS 自定义控件写入超过 8192 字节的插件。/
    / 理论上如果控件能够容纳,多大的文本都能放入    /
    /----------------------------------------------*/

    !include "MUI.nsh"
    !include "LogicLib.nsh"

    Name "test"
    OutFile "Setup.exe"

    SetCompressor lzma  ; 设置 lzma 压缩方式

    Var hwnd ; 自定义页面的窗口句柄

    Page custom PageInitFunc ""  # 自定义页面
    !insertmacro MUI_PAGE_INSTFILES  # 安装过程页面

    !insertmacro MUI_LANGUAGE "SimpChinese"  # 设置安装界面语言

    ReserveFile "io.ini" # 预先打包文件,方便安装加速释放
    ReserveFile "license.txt" # 预先打包文件,方便安装加速释放

    Function .onInit
      InitPluginsDir
      File "/oname=$PLUGINSDIR\io.ini" "io.ini"  ; 释放 io.ini 文件
      File "/oname=$PLUGINSDIR\license.txt" "license.txt"  ; 释放 license.txt 文件,该文件是一个超过 30 KB 的文本文件
      FunctionEnd

    Function PageInitFunc
      InstallOptions::initDialog /NOUNLOAD "$PLUGINSDIR\io.ini"
      Pop $hwnd             ; 获取自定义页面的窗口句柄
      GetDlgItem $1 $hwnd 1200 ; 控件句柄获取公式 (1200 + field 1 - 1)
      Push "$PLUGINSDIR\license.txt" # 在堆栈中压入 大文本文件
      Push $1        # 在堆栈中压入 控件句柄
      Call ShowText   # 调用过程,在控件中加入大文本
      InstallOptions::show  ; 显示自定义页面
      Pop $0
    FunctionEnd

    Function ShowText
    # 如果你对程序设计不熟悉,那么你可以不用理解这个过程,把它复制到你的脚本中就可以了。
      Exch $R0 ;控件句柄
      Exch
      Exch $R1 ;文件
      Push $R2
      Push $R3
      Push $R4
      Push $R5

      ClearErrors
      FileOpen $R2 $R1 r ;$R2 = 文件句柄
      ${Unless} ${Errors} ;确保打开文件没有发生错误
        System::Call /NOUNLOAD "Kernel32::GetFileSize(i, i) i (R2, 0) .R3" ;$R3 = 文件大小
        IntOp $R3 $R3 + 1
        System::Alloc /NOUNLOAD $R3 ;分配内存
        Pop $R4 ;内存地址
          ${If} $R4 U> 0 ;确保分配了内存
              System::Call /NOUNLOAD "*(i 0) i .R5"
              System::Call /NOUNLOAD `Kernel32::ReadFile(i, i, i, i, i) i (R2, R4R4, R3, R5R5, 0)`
              System::Call /NOUNLOAD "*$R5(i .R1)"
              ${If} $R1 > 0
                System::Call /NOUNLOAD "User32::SendMessage(i, i, i, i) i (R0, ${WM_SETTEXT}, 0, R4)"
              ${EndIf}
              System::Free /NOUNLOAD $R5
            System::Free $R4 ;释放内存
        ${EndIf}
        FileClose $R2
      ${EndUnless}

        Pop $R5
        Pop $R4
        Pop $R3
        Pop $R2
        Pop $R1
      Pop $R0
    FunctionEnd

    Section "sec a" SEC1
    SectionEnd

    引用 io.ini 发表于 2005-5-18 的内容:
    以下是代码片段:
    [Settings]
    NumFields=1

    [Field 1]
    Type=Text
    Flags=MULTILINE|VSCROLL
    State=Text
    Left=2
    Right=299
    Top=3
    Bottom=137


    出处:其他网站 作者:佚名 本文章由 金电网 搜集整理发布
    评论人 评论内容摘要(共 0 条,查看完整内容) 得分 0 发表时间
    ·正确安装CPU风扇及风扇加油全程图解
    ·主板全程图解
    ·卡丽来教程(一)
    ·破解星空极速
    ·关于GHOST的时说找不到一个叫GHOSTER..
    ·RM RMVB转VCD DVD方法及软件下载全面..
    ·Hacktool.rootkit病毒如何清除
    ·DVD转RMVB效果最好的工具AutoRV9中文..
    ·高频时代电脑分身术——BeTwin使用详..
    ·Ulead GIF Animator 5全新接触
    ·nlite额外保留与额外删除参考
    ·Windows.2003.Datacenter.Edition.SP..
    ·图解Windows XP远程桌面连接
    ·图解-EasyRecovery 604硬盘数据恢复软..
    ·图解双网卡共享ADSL宽带
    ·Microsoft SQL 2000 错误代码
    ·自己制作ghost版xp系统
    ·主板cpu知识大全图文版
    ·手把手教你架设电影服务器(图)
    ·六招教你学会破解
    ·正确安装CPU风扇及风扇加油全程图解
    ·主板全程图解
    ·卡丽来教程(一)
    ·关于GHOST的时说找不到一个叫GHOSTER..
    ·RM RMVB转VCD DVD方法及软件下载全面..
    ·Hacktool.rootkit病毒如何清除
    ·DVD转RMVB效果最好的工具AutoRV9中文..
    ·高频时代电脑分身术——BeTwin使用详..
    ·Ulead GIF Animator 5全新接触
    ·Windows.2003.Datacenter.Edition.SP..
    ·图解Windows XP远程桌面连接
    ·图解-EasyRecovery 604硬盘数据恢复软..
    ·图解双网卡共享ADSL宽带
    ·Microsoft SQL 2000 错误代码
    ·主板cpu知识大全图文版
    ·手把手教你架设电影服务器(图)
    ·六招教你学会破解
    ·卡巴key被封的解决办法
    ·Win2003架设DNS服务器
    ·TMPGEnc 小日本的使用详释
    金电下载站 版权所有 Copyright© 2001-2005 www.jdxz.net, All Rights Reserved.
    湘ICP备05012976