- 目的:J2EE web 工程部署环境:jdk1.5.0 +jboss-4.0.3SP1+mysql 5.0,通常情况下先安装jdk,配置环境变量;然后安装mysql,创建db并初始化数据;最后解压jboss,部署应用程序包。在windows下安装,客户要求能做成exe安装包,通过一步点击,完成所有的操作,以减少出错率。
- 实施:windows安装包制作软件工具:NSIS是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System)的缩写,它是一个免费的 Win32 安装、卸载系统。
- 准备工作:下载NSIS工具,准备一个文件夹(如myapp),1.将以前安装过的jdk1.5.0拷贝到myapp目录下;2.将jboss-4.0.3SP1减压到myapp目录下,从网上下一个jboss注册windows服务的文件;3.从网上下一个mysql5.0的免安装包,减压到myapp目录下;从网上找到AddPath.nsh和WriteEnvStr.nsh也放到myapp目录下(NSIS 2.45下载地址:http://www.ddxia.com/view/11509962543383.html)
- 安装NSIS,打开后使用“新建脚本向导”创建脚本,
下一步到基本信息
填写基本信息后,继续下一步,到选项页面,选择安装包需要支持的语言等
继续下一步,选择安装目录和授权文件,注意需要把授权文件栏清空
继续下一步,选择应用程序安装文件选择
继续下一步,直到出现向导以完成页面
选择保存脚本和转化文件路径到相关路径,然后点完成,保存脚本到myapp目录
脚本全部修改完成后可以CTRL+F9执行编译脚本,会在脚本同目录下生成对应的exe安装文件,以下部分是教如何修改脚本
5. 脚本修改:
在脚本的head部分增加脚本“!define ALL_USERS” ,这个变量告诉是增加所以用户的系统变量,如果不设,增加在当前用户的环境变量中。然后引用AddPath.nsh和WriteEnvStr.nsh,最后定义环境变量参数。变量定义位置如下图:
在Section -Post中添加脚本让环境变量起作用,调用系统或程序api来注册服务
在Section uninstall 中加上下载时需要去除环境变量和注册服务脚本
6.添加脚本的说明:
设置全局用户变量
!define ALL_USERS
引入增加变量到path的类库
!include AddPath.nsh
引入增加变量到系统变量的类库
!include WriteEnvStr.nsh
定义环境变量参数
;Define for Environment Variables
!define JAVA_HOME "$INSTDIR\jdk1.5.0"
!define WEB_CONFIG_HOME "$INSTDIR\config"
!define JBOSS_HOME "$INSTDIR\jboss-4.0.3SP1"
!define MYSQL_HOME "$INSTDIR\MySQL"
增加环境变量参数到系统变量中
Push JAVA_HOME
Push '${JAVA_HOME}'
Call WriteEnvStr
push WEB_CONFIG_HOME
Push '${WEB_CONFIG_HOME}'
Call WriteEnvStr
push JBOSS_HOME
Push '${JBOSS_HOME}'
Call WriteEnvStr
push MYSQL_HOME
Push '${MYSQL_HOME}'
Call WriteEnvStr
Push '${JAVA_HOME}\bin'
Call AddToPath
注册mysql为系统自动服务并启动
SetOutPath "${MYSQL_HOME}\"
ExecWait "startMYSQL.cmd"
注册jboss为系统自动服务并启动
SetOutPath "${JBOSS_HOME}\bin"
ExecWait "service.bat install"
SetOutPath "${JBOSS_HOME}\bin"
ExecWait "sc config jboss start= auto"
SetOutPath "${JBOSS_HOME}\bin"
ExecWait "net start jboss"
创建db并初始化
SetOutPath "${MYSQL_HOME}\bin\"
ExecWait "init.bat"
启动windows任务服务,添加新任务,在每天23:59分自动重启jboss服务
SetOutPath "$INSTDIR\"
ExecWait "sc config Schedule start= auto"
SetOutPath "$INSTDIR\"
ExecWait "net start Schedule"
SetOutPath "$INSTDIR\"
ExecWait "AT 23:59 /every:M,T,W,Th,F,S,Su net stop jboss"
SetOutPath "$INSTDIR\"
ExecWait "AT 00:01 /every:M,T,W,Th,F,S,Su net start jboss"