在 Windows 下重编译 NSIS 2.46 源代码


最近在做一个用于 Java 的 NSIS 安装程序,涉及到 CLASSPATH,无奈 -cl 的路径太长,NSIS 的默认字符串只有 1024 个字节长。从 NSIS 的官方网站找了下,Special Build 除了 8192 之外,还有个 logset,没有两个的结合。不可能仅仅为了 8192 字节放弃了按 install.log 的卸载功能,只好自己手动编译 NSIS 的源代码,来满足自己的要求了。


按照 NSIS 帮助文档的说法,要构建 NSIS 首先要安装 Python 和 SCons。以下是我的安装步骤,如果您也有自己编译的需要,可作为参考。


1、从 NSIS 官方网站 http://sourceforge.net/projects/nsis/files/ 下载 NSIS 2.46 的源代码 zip 包,解压到 C:\nsis-2.46-src。


2、从 Python 官方网站 http://www.python.org/getit/ 下载 Python 2.7.5 (不建议尝试新版本,避免 SCons 不认)安装到 C:\Python27,将此路径添加到系统 PATH 环境变量。


3、从 从 SCons 官方网站 http://sourceforge.net/projects/scons/files/ 下载 scons-2.3.0-setup 安装(自动默认到 Python 的子目录),将路径 C:\Python27\Scripts 添加到系统 PATH 环境变量。


4、由于 NSIS 的 Menu 采用 wxWidgets 编写,因此去 wxWidgets 官方网站 http://www.wxwidgets.org/downloads/ 下载 wxWidgets-2.8.11.zip (不要尝试 2.9 系列,否则就等着各种编译警告各种编译错误吧)解压到 C:\wxWidgets。新建环境变量 WXWIN,值为该路径 C:\wxWidgets。


5、在进行下一步之前,确定你的系统有 Visual C++ 6.0 的编译环境,因为下一步将需要 nmake 编译 NSIS Menu(我的机器上还有 VS2010 的环境,用它编译会各种报错),确定你的系统环境变量中有 VC 6.0 的 bin 目录,比如  C:\Program Files\Microsoft Visual Studio\VC98\Bin。


6、进入 NSIS 的 Menu 目录,C:\nsis-2.46-src\Contrib\NSIS Menu\wx,命令行下启动 wxbuild.bat,先编译 Menu 程序。


7、进入 NSIS 目录 C:\nsis-2.46-src\SCons\Config,修改 ms 文件,将涉及到 opt:nowin98 字样所在的行全部用 # 注释掉,一共有 4 行。


8、回到 NSIS 主目录 C:\nsis-2.46-src,命令行下启动命令:

scons NSIS_CONFIG_LOG=yes NSIS_MAX_STRLEN=8192 dist-zip
出去抽根烟,等待 5-10 分钟。在 NSIS 主目录下会躺着一个 zip 包,就是它了。


9、将这个 zip 包里面的 makensis.exe (注意不是 makensisw.exe)和 Stubs 文件夹拷出来,这就是你最终需要的文件了。把它们扔到你的 NSIS 目录覆盖同名文件,收工。可以开始编译你的 NSIS 安装脚本了。




注意事项

A、Scons 安装好了、添加到环境变量之后,命令行下启动 Scons 会报错:

scons: *** No SConstruct file found.
File "C:\Python27\Lib\site-packages\scons-2.3.0\SCons\Script\Main.py", line 905, in _main
别紧张,这是因为你命令行的当前路径下没有 SConstruct 文件,Scons 的思路貌似不允许你没事空敲文件名玩。

B、按照 Microsft 的说法,opt:nowin98 编译选项在 VS2005 起就已经取消了。但即便是采用 VC 6.0 编译,依然会报错,所以需要注释掉。


C、你也可以在第 8 步中指定命令行打成安装包直接安装到指定路径

scons PREFIX="C:\Program Files\NSIS" install
但不建议这么做。


D、默认的 NSIS 包缺少很多插件,可以去 http://nsis.sourceforge.net/Category:Plugins 找到很多有用的东东。



注:部分问题的解决参考了 http://forums.winamp.com/archive/index.php/t-277283.html



你可能感兴趣的:(在 Windows 下重编译 NSIS 2.46 源代码)