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

关于如何打破 NSIS 的 8192 字节限制

作者: RESTOOLS 来源:RESTOOLS 时间:2005-09-15 点击:9180

以下是引用片段:
问题引发:标准 NSIS 编译器只接受 1024 字节的字符串,就算特别编译版也只是 8192 字节。如何打破这个限制呢。
 

所以我写了个插件。打破这个限制。如下:下载插件,附插件源码,里面有例子脚本。在这里先附上例子脚本。
----已找到更加简单的方法来实现这个功能,请看 [关于打破 NSIS 的 8192 字节限制的更简单方法]
---- 这里作为一个功能测试的另类方法吧。
引用 Setup.nsi 发表于 2005-5-17 的内容:
以下是代码片段:
/*----------------------------------------------/
/ 关于 NSIS 自定义控件写入超过 8192 字节的插件。/
/ 理论上如果控件能够容纳,多大的文本都能放入    /
/----------------------------------------------*/

!include "MUI.nsh"

Name "test"
OutFile "Setup.exe"

SetCompressor lzma  ; 设置 lzma 压缩方式

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

Page custom PageInitFunc PageLeaveFunc  # 自定义页面
!insertmacro MUI_PAGE_INSTFILES

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

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

Function .onInit
  InitPluginsDir
  File "/oname=$PLUGINSDIR\io.ini" "io.ini"  ; 释放 io.ini 文件
  File "/oname=$PLUGINSDIR\license.txt" "license.txt"  ; 释放 license.txt 文件
FunctionEnd

Function PageInitFunc
  InstallOptions::initDialog /NOUNLOAD "$PLUGINSDIR\io.ini"
  Pop $hwnd             ; 获取自定义页面的窗口句柄
  GetDlgItem $1 $hwnd 1200 ; 控件句柄获取公式 (1200 + field 1 - 1)
  nsExStr::SetWindowText $1 "$PLUGINSDIR\license.txt"  ; 写入一个超过 8012 字节的文件到一个控件,我这里写入的是一个超过 30KB 的文本文件。理论上大小没有限制,只要控件能够接受多大,它就能有多大。
  InstallOptions::show  ; 显示自定义页面
  Pop $0
FunctionEnd

Function PageLeaveFunc
FunctionEnd

Section "sec a" SEC1
SectionEnd

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

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

nsExStr::SetWindowText 调用格式:
nsExStr::SetWindowText [控件窗口句柄] [想加入控件中的文本文件]
返回值: $0 如果是 0 是正常返回,如果是 1 则执行错误。
抛弃那个 NSIS 的编译特别版吧,实在是限制多多,最大也不过是 8192 字节,对于我来说,那是不能满足的。
有了这个插件,你将可以在任何的控件中放入超大文本,你可以预先打包文件,例如协议之类的文本文件,也可以动态写入一个文本文件,然后调用这个插件来把文本写入一个控件
本来如果这个控件用 VC++ 来写可以很小的,无奈偶的 VC++ 本事实在太差,而 Delphi 的代码却是如此的简单,在 exdll.dll 的基础上只加了不到 10 句,这是 VC++ 无法相比的。而且相信在 lzma 的强大压缩之下,当安装文件越来越大时,这个损耗会越来越小。
尽管如此,偶测试过,用 lzma 算法压缩,安装程序只增加了 28 KB 不到。我想如果要我在 VC++ 里面大费周章,我想我还是增加 28 KB 字节算了。

使用方法:把 nsExStr.dll 文件放到 plugins 中,然后就可以像调用其他插件那样做了。
插件下载: http://restools.hanzify.org/nsis/nsExStr.zip

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

·上一篇: 实现 NSIS 自定义页面中的控件操作代码 ·下一篇: 论坛精华 - Inno Setup 使用篇问世

· 版权申明: 本文引自《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号