·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> 工具使用 >> 关于打破 NSIS 的 8192 字节限制的更简单方法    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

关于打破 NSIS 的 8192 字节限制的更简单方法

作者: RESTOOLS 来源:RESTOOLS 时间:2005-09-16 点击:9814

上次那个要做一个插件,花去了二十几个 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

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): NSIS 安装

·上一篇: PPC字体修改之初步尝试 ·下一篇: 如何把安装的卸载程序放到其他目录

· 版权申明: 本文引自《RESTOOLS》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《RESTOOLS》[ 作者: RESTOOLS],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号