Inno Setup 对比 Nullsoft Scriptable Install System
inno 和 nullsoft 这2个安装软件,很早很早就听说过了,但一直没有使用过。 这2天对比了一下,谈一下初步印象。
inno 是用delphi写的,里面居然套了一个pascal 的脚本解释器,还可以debug ,设置断点,单步调试,奇妙的思路,令我叹为观止。安装过程中,TEdit, TMemo, TCheckBox, 大凡delphi里的控件,安装脚本都可以调用,并打包在安装文件之中。美中不足之处,是安装文件稍微大点,我测试了一下,什么文件也没有包装,就要200多K。
nullsoft 的特点是安装包非常小,符合我的口味。不太好的是需要学习它的脚本语言,对程序员来说,这也不算什么。
试过几个语法加亮的编辑器,推荐使用:HM NIS EDIT: A Free NSIS Editor/IDE
下载地址 http://hmne.sourceforge.net 感觉比较爽。但是也有美中不足,无法单步调试。
使用nullsoft install 在setup.exe 里,增加版本信息
!insertmacro MUI_LANGUAGE "SimpChinese"
VIProductVersion "1.2.3.4"
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "ProductName" ${PRODUCT_NAME}
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "Comments" ""
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "CompanyName" ${PRODUCT_PUBLISHER}
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "LegalTrademarks" ${PRODUCT_NAME}
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "LegalCopyright" ${PRODUCT_PUBLISHER}
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "FileDescription" ${PRODUCT_NAME}
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "FileVersion" ${PRODUCT_VERSION}
注意,MUI_LANGUAGE 和version只能放在脚本最后,不然会有一堆警告。
Define the LangStrings after you insert the MUI_LANGUAGE macros. Insert the MUI_LANGUAGE macros after you insert the page macros.
nullsoft 里面,增加splash画面的方法:
Function .onInit
InitPluginsDir
File /oname=$PLUGINSDIR\splash.bmp "splash.bmp"
splash::show 1000 $PLUGINSDIR\splash
用 MessageBox MB_OK $PLUGINSDIR 显示一下变量$PLUGINSDIR,发现是:
C:\Documents and Settings\z\Local Settings\Temp\nsz2A2.tmp
进入这个目录,看到splash.bmp 和 splash.dll好好地在里面躺着呢。在对比一下 C:\Program Files\NSIS\Plugins\splash.dll, 豁然开朗,原来,splash功能是nullsoft 的一个插件,如果安装软件使用了这个功能,肯定要把splash.dll打包进入setup.exe。别的插件,也应该是这样的了。53K bmp +4K DLL, 安装包只增大10多k, nullsoft 的压缩率还是很高的
在安装程序里,增加一个edit框,并把用户输入的text,写入安装目录下的配置文件里:
ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
ReserveFile "test.ini";Order of pages
Page custom CreateCustom LeaveCustom ": Testing InstallOptions" ;Custom page. InstallOptions gets called in SetCustom.Function CreateCustom
;Display the InstallOptions dialog
Push ${TEMP1}InstallOptions::dialog "$PLUGINSDIR\test.ini"
Pop ${TEMP1}Pop ${TEMP1}
FunctionEnd
Function LeaveCustom
ReadINIStr ${TEMP1} "$PLUGINSDIR\test.ini" "Field 3" "State"
WriteINIStr "$INSTDIR\config.ini" "ServerIp" "State" ${TEMP1}FunctionEnd
Function .onInit
;Extract InstallOptions files
;$PLUGINSDIR will automatically be removed when the installer closesInitPluginsDir
File /oname=$PLUGINSDIR\test.ini "test.ini"FunctionEnd
马飞涛