JavaEE的Web应用程序如今已大行其道,但其安装、配置、部署却一直繁琐无比,客观上阻碍了Web应用程序更大规模的推广和应用。因此,开发方制作一个集JDK、Web中间件、开源数据库的全自动安装程序很有必要。

本人经过多日的艰苦摸索而终于成功搞定一个具备上述功能的全自动安装程序。说明如下:

安装程序制作工具:Installshield 12 Premier,因为没银子只好用破解版:),简称IS12;

JSDK:Java 6.0;

应用服务器:Tomcat 6.0 解压版。webapps目录下已放好了要发布的应用程序;

数据库:MySQL 5.0 解压版;

本安装程序具备的特点如下:

1.不需客户机安装JVM,只需他有Windows 2000/XP/2003/Vista中一种操作系统;

2.安装完成后数据库、应用服务器自动注册为系统服务,并自动启动。并且机器重启后仍然有效;

3.对客户机的改动很小,不改变用户机器的环境变量、注册表;卸载后干净、不留残余。

4.安装完成后,打开IE即可立即访问Web应用程序。

制作过程粗略描述如下:

1.建立一个目录,存放你要用来打包的目录和文件,如“MyProject”;

2.首先在本机上安装JDK,然后把安装好的JDK拷贝到MyProject目录下,把JDK的目录名改为“jsdk”;

3.同理,把已部署好Web应用程序的免安装版Tomcat和MySQL也拷贝到MyProject目录下,并分别把目录名改为“tomcat”和“mysql”;(这里的目录都不带版本号是为了增加安装程序的通用性)

4.为使tomcat摆脱JVM的系统环境变量、并使用本目录下的JSDK,需改变其bin目录下的catalina.bat和service.bat两个批处理文件,使之指向指定的JAVAHOME和JVM;具体不再赘述;

5.用IS12建立一个InstallScript MSI Project;(注意:不要用Basic MSI Project,那是徒劳无功)

6.在新建立的工程文件里把上述已存放好的jsdk、tomcat、mysql三个目录都加到工程里,注意勾上"subfolder"选项,把子目录中的文件也加进来,很简单不再赘述;

7.为了实现安装完成后mysql和tomcat的注册服务、自动启动;以及卸载程序时的停止服务、卸载服务,需要写InstallScript脚本(本人起初看着那些脚本就发怵,但最终还是不得不写脚本了事)。关键是重写OnFirstUIBefore(安装程序开始运行时调用)、OnInstallFilesActionAfter(安装结束后调用)、OnUninstall(卸载开始时调用)这几个库函数。重写后不必加到Custom Action的Sequences里,安装程序会自动在相应时候调用。

8.手工写下列函数:动态生成my.ini配置文件(mysql要注册成系统服务就必须依靠此配置文件。存放目录在%mysql%下);注册并启动mysql服务;注册并启动tomcat服务(上述两个函数放在安装程序完成后调用);停止并卸载停止mysql服务;停止并卸载tomcat服务(上述两个函数放在卸载开始时调用);

9.上述工作完成后就基本大功已告成。但还有如下几个细节不能忽视:

10.许可协议:首先自己写一个名为License.txt的许可协议文件,然后在Behavior and Logic|Support Files/Billboards|Language Independent中加入该License.txt;并在OnFirstUIBefore函数中调用;

11.不赞成建立开始菜单中的卸载快捷方式。因为本人做过实验,运行卸载快捷方式时,OnUninstall函数不会被调用,不知怎么回事,也懒得去仔细研究了。卸载程序可以放在控制面板中的“添加删除程序”中。

12.很关键的一点:把Install Information|General Information|Project Properties中,Enable Maintenance选为No,否则OnUninstall函数将不会被调用

大体如上述过程,此时一个全自动安装程序制作完毕,若有细节遗漏,请大家自己研究调试。

如还有不清楚的或想要安装程序的源工程或源代码的,欢迎给本人发email索取:

分享到: http://blog.csdn.net/xuxy03/article/details/2495365

最新文章

  1. [转+整理] Android 分辨率,密度,像素单位说明
  2. VS2010打包,遇到的一些问题和解决办法
  3. nginx ssi 配置小细节(一)
  4. Win8.1 IIS6 SQL SERVER 2012 执行 SqlServices.InstallSessionState 出错
  5. JavaScript 入門
  6. ASP.NET农历时间显示(两)
  7. 前端——CSS笔记
  8. js入门实例
  9. js实现的文章输入检查与测速。
  10. java udp socket通信(仅发送)
  11. 杭电ACM 1000题
  12. 卷积神经网络 CNN 学习笔记
  13. Python中的作用域及global用法
  14. Confluence 6 审查日志的对象
  15. Java7/8 中 HashMap 和 ConcurrentHashMap的对比和分析
  16. 【强化学习】python 实现 q-learning 例一
  17. UVa 10859 - Placing Lampposts 树形DP 难度: 2
  18. bzoj 2806 [Ctsc2012]Cheat——广义后缀自动机+单调队列优化DP
  19. npm install的几种命令形式区别
  20. SharePoint Server 2013 通过IP无法访问站点

热门文章

  1. 工作中用到的oracle字符串分割整理
  2. Adapter 代码中启动报错
  3. everthing 添加右键菜单
  4. 为bootstrap添加更多自定义图标
  5. C++小项目:directx11图形程序(六):cameraclass
  6. centos6环境下安装tmux
  7. Extjs4 -- Ext.loader命名空间的配置
  8. leetcode日记 Product of Array Except Self
  9. 例子:Basic Lens sample
  10. vim自动补全功能