下面说一下安装程序的制作.
我们将接触NSIS, NSIS 是“Nullsoft 脚本安装系统”(Nullsoft scrīptable Installation System)的缩写,它是一个相当小,高效率的win32安装系统。可通过样本修改或根据自己要求编写 NSI 脚本文件来定制自己的安装系统, 可实现许可协议的显示、安装类型的选择、写入注册表、写入INI文件、连接程序外壳、语句跳转、提示信息显示、 创建卸载程序、安装和卸载程序图标的定制、 创建快捷方式等其他安装程序应有的功能,是一款操作简单、功能强大的高效率安装软件精品。
1. 要用NSIS制作安装程序,首先得下载并安装一个NSIS.
下面是Nullsoft Installation System v2.37 汉化版的下载地址:
http://www.crsky.com/soft/1180.html
2. 安装了以后,就是编写NSIS脚本,这个对于NSIS新手来说,这个实在太难了.而且这里只是针对Mount&Blade的MOD来制作安装程序,也就没有必要对NSIS去太过深入了.
不用担心,官方论坛的Janus已经为Mount&Blade的MOD编写好了一个专门的NSIS脚本模板.
这个可以到Mount&Blade Unofficial File Repository上下载:
Mount&Blade Mod Installer Script v1.9
http://www.mbrepository.com/modules/PDdownloads/singlefile.php?cid=3&lid=46
下载以后,可以看到3个NSI文件,其实就是NSIS脚本文件,那个1.9版是最新的,我们就用它吧.
把MnB Mod Installer Script 1.9.nsi复制到你要打包制作的安装包的MOD的目录下.
用记事本或者上面提到的NSIS编译器打开MnB Mod Installer Script 1.9.nsi. 建议直接双击用上面提到的NSIS编译器打开.
看起来很长,但是其实我们只用看前39行. 后面的部分我们不需要去了解,也不需要去改动. 需要改动的地方更是少,只有几处而已.
QUOTE:
# Nullsoft Install System (NSIS) Script for Mount&Blade Mod Installation
(Mount&Blade Mod的安装程序的NSIS脚本)
; You'll notice comments start with a "#" or ";". ";" is more appropriate for commenting out whole lines.
你会看到注释部分(绿色显示的部分)以"#"或者";"开头. 用";"来注释掉一整行更加恰当.
!define PRODUCT_NAME "Amazing Stuff Mod" #The title of your mod goes here(定义你MOD的标题)
!define PRODUCT_FOLDER_NAME "Amazing Stuff" #The folder name for your mod; spaces are fine, just mind Windows restrictions (no /\:*?"<>| )(定义你的MOD的文件夹的名字,可以含空格,但是不要使用Windows文件(夹)命名时禁用的符号(/\:*?"<>|))
!define PRODUCT_VERSION "1.0" #The mod version(你MOD的版本)
!define MB_VERSION "1011" #The version of M&B the mod was created for, ex. "808" is version 0.808 of M&B.
#The above line is used to warn people trying to install to a different M&B version that it probably won't work.
#For any version older than 808, you should instead list 808 as the version since earlier versions cannot be properly detected.
#If you want your mod to be installable without warning on any version of M&B, you can comment out the MB_VERSION line (with a ";")
(定义你的MOD适用的版本,这样是用来警告那些试图把MOD安装到不相符的游戏版本上的人.如果你不想显示这个警告,你可以在这一行的开头加一个";"把整行都注释掉)
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" #The title given during setup of your mod, defaults to mod title and version(这个是安装过程中,你MOD的标题,这行不用编辑)
OutFile "amazing_stuff_mod_${PRODUCT_VERSION}.exe" #The filename of the installer you're creating. Change "amazing_stuff_mod" to an 'internet friendly' version of your mod's title(定义输出的安装文件的名字,改一下前面灰色的部分为你MOD的名字)
!define README_FILE "readme.txt" #Change "readme.txt" to your mod's readme filename, or comment out this line (with a ";") to not have "Show Readme" option at finish(定义安装完后的说明文件(readme.txt),你可以把"readme.txt"改成你MOD的说明文件的名字,或者你可以在这一行的开头加一个";"把整行都注释掉)
!define INSTALL_TEXT "installer.txt" #"installer.txt" contents will be displayed on the second (license) screen; comment out this line (with a ";") to have it skip that screen(定义将会在第2个界面显示的版权说明文件,你可以把"installer.txt"改成你MOD的版权说明文件的名字,或者你可以在这一行的开头加一个";"把整行都注释掉)
!define MUI_ICON "icons\knight-z8.ico" #Icon your installer will use(定义你的安装程序的安装图标)
!define MUI_UNICON "icons\knight-z6.ico" #Icon for the uninstaller (make SURE icon format is same as installer icon, can be same icon)(定义你的安装程序的卸载图标,确保卸载图标的格式和安装图标的格式一致,可以使用相同的图标)
# Optional Graphics (可选的图形化项目)
# make ABSOLUTELY sure the BMP files used in the below lines exist if you uncomment the line, or installer creation will fail(确认下面这些你没有注释掉的行里出现的bmp文件是存在的,否则一定会出错跳出.)
;!define MUI_WELCOMEFINISHPAGE_BITMAP "welcome.bmp" #Large side bitmap for the Welcome page and the Finish page (should be 164x314 pixels)(你可以把开头的";"去掉,以启用这一行,这一行是定义开始页面和结束页面左边的那个大图的.需要是164x314(像素)的bmp图)
!define MUI_HEADERIMAGE #If this isn't defined, the below line does nothing. You should leave this line as it is.(如果没有定义,下面的行不会执行,但是这一行还是得留着,不能注释掉)
;!define MUI_HEADERIMAGE_BITMAP "header.bmp" #Small bitmap image to display in the top left corner of the header on all other pages (should be 150x57 pixels)(你可以把开头的";"去掉,以启用这一行,这一行是定义其他页面上左上角的那个小图的.需要是150x57(像素)的bmp图)
!define CREATE_UNINSTALLER "no" #If you want an uninstaller to be created for your mod to be listed in Add/Remove Programs, change this to "yes"(如果你想为你的MOD创建一个卸载程序,把这个"no"改为"yes")
#You probably shouldn't edit below this point.(从这往下的部分你不应该去编辑)
#Really, I'm serious. Don't cry to me if you screw it up.
不过有一行还是可以尝试修改的,第89行.这个是设定安装程序的语言的.你可以把"English"改成"SimpChinese"(简体中文)或者"TradChinese"(繁体中文).
!insertmacro MUI_LANGUAGE "English"
注意事项:上面定义里用到的 txt文件, ico文件和 bmp文件最好都放在MOD目录下. 这样填的时候就直接填文件名字就可以了,而不需要填文件的路径了.
ico文件,也就是图标文件可以自备,也可以采用 Mount&Blade Mod Installer Script v1.9 里提供的图标文件.
提示:转到292行.你会看到:
File /nonfatal /x *.nsi /x *.ico /x *.zip /x *.exe /x *.rar /x *.bak /x *.orig /x *.lnk /x installer.txt /x readme_installer.rtf *.*
文件名前加"/x"(注意空格)的含义是排除掉该文件或者该类型的文件. 这里的文件名可以使用通配字符串"*", "*.exe"的意思就是(该目录下的)所有的exe文件.
这一行就是排除文件用的,使得这些文件不出现在使用者该MOD的目录下. 这里排除了nsi文件(NSIS脚本文件), ico文件(图标文件), 其他排除的文件,自己看吧. 这样你就不用担心,把写好的NSIS脚本文件放在MOD目录下编译,导致NSIS脚本文件被安装者获得,图标文件也是一样的. 如果你为你的安装程序加了2张bmp图,你不想最终安装到MOD的目录下,你可以在这一行里加两个排除就可以 /x xxx.bmp /x yyy.bmp. 不要简单地用/x *.bmp, 这样那个main.bmp(MOD的那个图标)也将被排除掉.
特别说明:虽然排除了ico文件,bmp文件等.也只是不把这些文件安装到使用者该MOD的目录下,上面定义里用到的ico文件和bmp文件仍然包含在安装程序里,安装程序的图标仍然正常显示,安装过程中那2个bmp图也正常显示, 定义里没有用到的ico文件和bmp文件那就是真的被排除了,完全不包含到安装程序里了.
到此为止,脚本部分就完成了.再次强调,这个脚本文件(MnB Mod Installer Script 1.9.nsi)是要放在你的MOD的目录下的.
4. 编译脚本,通过脚本把文件转化为安装程序.
在MnB Mod Installer Script 1.9.nsi上点右键,会看到菜单里有"编译 NSIS 脚本"和"编译 NSIS 脚本(选择压缩器)"两个菜单项. 点"编译 NSIS 脚本"就直接编译了,而没有进行压缩. 点"编译 NSIS 脚本(选择压缩器)",在下拉菜单里可以选择压缩器. 建议选LZMA.
都确定之后,NSIS编译器就开始编译了. 在MOD目录下生成一个MOD安装程序,当然是exe文件了. 最好用winrar压缩一下,因为几乎所有网站都是不允许直接上传exe文件的.
PS: 重要技巧.
其实Janus编写的Mount&Blade Mod的安装程序的NSIS脚本实现了一个相当重要的功能. 通过它制作出来的MOD安装程序会首先复制使用者的native文件夹里的所有文件到要安装的MOD的文件夹里. 然后再用MOD安装程序制作者提供的自己MOD文件夹里的文件进行覆盖. 也就是说,MOD安装程序制作者只用提供自己MOD里与native里不相同的(修改过的)文件就可以了.
建议做安装程序的时候,把MOD复制一份到其他地方再做. 做的时候,可以把整个SceneObj文件夹删掉,如果你没有改变native的任何场景的话,或者SceneObj文件夹里只放你修改过的场景文件,而把没有修改过的全部删掉. map.txt也可以删掉,如果你没有改动native的地图的话. 其实相对native你没有改过的文件都可以删掉. 这样可以大大减小安装程序的体积,而又不会遗漏什么. 建议除了map.txt以外的txt还是都保留,因为txt文件是相互关联的,通常你无法确定这些文件相对native是否都有改动.而且如果某使用者胡乱修改他自己native里的txt文件的话,很可能导致MOD安装程序制作者提供的其他txt文件和使用者修改的txt文件之间不匹配,而导致BUG.
[ 本帖最后由 rubik 于 2008-11-22 16:36 编辑 ]
我也来说两句 查看全部评论 相关评论