正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一直以来,B/S程序由于其结构的原因不能像安装WINDOWS程序那样使用setup来进行安装,一般都是由开发人员配置好WEB运行环境,再导入数据库(或者由WEB的安装程序完成此部分),这样一般来说够用了,再如果是不懂开发的人配置这些环境就麻烦了,如果能像安装WINDDOWS程序那样,一路回车法就能安装成功,那就更帅了。
前几天由于公司的项目需要,我小小的的研究了一下NSIS,为什么选它呢?因为它是使用脚本来定制安装程序的,非常灵活,就是要学习一下它的脚本语言,多看一些例子就会用了。
先说一下制作的原理,系统的环境是apache1.3, php5.1.4,mysql5。这几个其实都是不需要安装的,在window2000/xp下,直接配置成服务,并启动服务就行了。所以安装过程应该是分为
1.复制文件到指定目录.)
2.配置apache和mysql.
3.把apache和mysql安装成服务并启动.
首先下载并安装NSIS,安装后可以到它的example目录下看一下有很多例子程序。右键点示例脚本选择Compile NSIS Script进行编译,在该目录下会生成一个.exe文件,就是生成的安装程序文件。
NSIS的脚本由一些类似PHP和汇编的语法指定组成,还可以定义函数,宏。每个脚本至少有一个Section,名字为Uninstall的以un.开头的Section被认为是卸载时使用的指令集。
下面是安装程序的全部脚本。
- SetCompressor lzma
- !include "MUI.nsh"
- !define MUI_HEADERIMAGE
- !define MUI_HEADERIMAGE_BITMAP "E:\logo.bmp"
- !define MUI_ABORTWARNING
- !define APP_NAME "蓝桥OfficeSystem2.0"
- !insertmacro MUI_PAGE_WELCOME
- !insertmacro MUI_PAGE_DIRECTORY
- !insertmacro MUI_PAGE_INSTFILES
- !insertmacro MUI_PAGE_FINISH
- !insertmacro MUI_UNPAGE_WELCOME
- !insertmacro MUI_UNPAGE_CONFIRM
- !insertmacro MUI_UNPAGE_INSTFILES
- !insertmacro MUI_LANGUAGE "SimpChinese"
- Name ${APP_NAME}
- Icon "${NSISDIR}\Contrib\Graphics\Icons\arrow-install.ico"
- UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\arrow-uninstall.ico"
- DirText "安装程序将安装 $(^Name) 在下列文件夹。$\r$\n$\r$\n要安装在不同文件夹,单击 [浏览] 并选择其他文件夹。"
- InstallDir "C:\lqserver"
- OutFile "setup.exe"
- Section "setup"
- SetOutPath $INSTDIR
- File /r Apache
- File /r mysql5
- File /r officesystem2
- File /r php-5.1.4
- File /r config.js
- File /r sc.exe
- Call config
- WriteUninstaller "uninstall.exe"
- CreateDirectory "$INSTDIR\temp"
- CreateDirectory "$SMPROGRAMS\${APP_NAME}"
- CreateShortCut "$SMPROGRAMS\${APP_NAME}\启动${APP_NAME}.lnk" "http://localhost/"
- CreateShortCut "$SMPROGRAMS\${APP_NAME}\卸载${APP_NAME}.lnk" "$INSTDIR\uninstall.exe"
- SectionEnd
- Section "Uninstall"
- ExecWait "$INSTDIR\sc stop apache"
- ExecWait "$INSTDIR\Apache\apache -k uninstall"
- ExecWait "$INSTDIR\sc stop mysql"
- ExecWait "$INSTDIR\mysql5\bin\mysqld-nt --remove mysql"
- RMDir /r $INSTDIR
- RMDir /r "$SMPROGRAMS\${APP_NAME}"
- SectionEnd
- Function config
- ExecWait "cscript $INSTDIR\config.js $INSTDIR"
- #先停止并禁用IIS服务
- ExecWait "$INSTDIR\sc stop w3svc"
- ExecWait "$INSTDIR\sc config w3svc start= disabled"
- #安装apache和mysql服务
- ExecWait "$INSTDIR\Apache\apache -k install"
- ExecWait "$INSTDIR\sc start apache"
- ExecWait "$INSTDIR\mysql5\bin\mysqld-nt --install mysql --defaults-file=$INSTDIR\mysql5\my.ini"
- ExecWait "$INSTDIR\sc start mysql"
- FunctionEnd
复制代码
一些指定的解释
SetCompressor lzma 指定压缩方式) r0 ^: B3 ?2 T( K8 |& K, {
!define APP_NAME "蓝桥OfficeSystem2.0" 定义应用程序的名字以便后面使用。
!insertmacro MUI_PAGE_*
这些是安装程序的所有页面,包括欢迎界面,选择目录,安装文件,完成页面。2 }# R! o( e, _# q: I x
, n. H L0 J8 I
Name ${APP_NAME} 指定应用程序的名字,语法和PHP有些类似
Icon "${NSISDIR}\Contrib\Graphics\Icons\arrow-install.ico"
UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\arrow-uninstall.ico"! B+ g# `/ B5 G" z7 m+ k$ t
指定安装程序和卸载程序的图标,$NSISDIR是NSIS的安装目录,不用修改。3 _0 h1 y2 D. v" h. y3 E9 y
InstallDir "C:\lqserver" 默认安装目录
OutFile "setup.exe" 输出的安装程序文件名称" Z! k/ i q: B e2 T t
下面的一个section就是主要的安装和配置指令& d9 m9 g$ f; z% j% p$ x
File /r 解压一个文件夹及下面所有的文件和子目录到安装位置4 K- f- G" @- W+ P
Call config 调用config函数,这个函数主要是修改配置文件的作用。
WriteUninstaller "uninstall.exe" 生成卸载程序$ {9 W- h B$ `5 X0 J- ^& g7 {; I
ExecWait 是执行程序并等待返回,这样可以防止外部程序的运行而影响到NSIS脚本的执行。比如在apache服务的停止的时候,如果服务没停止完,就进行删除文件的操作就会出错。
在修改apache和mysql配置文件的时候我采用了js脚本来完成。因为用NSIS来完成这个功能太吃力了,用JS脚本进行字符串替换还是比较简单的,主要是把一些目录修改为安装目录就可以了。
还有这里使用了sc.exe,这个程序是命令行下管理windows服务的程序,不是系统自带的,可以去microsoft下载,使用它先禁用iis服务,防止和apache发生冲突。另外使用sc启动和停止服务要比用net命令快的多。 |