最近在做一個用於 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