最近公司需要我把做完的项目打包,但公司没有相关经验的文档来作为指导参考,作为有科(zuo)学(shi)观(xingZhi)的我,就按项目流程来做这次任务.
软件名称 | 软件版本 | 下载地址 |
---|---|---|
Tomcat | 7.059(64位) | http://tomcat.apache.org/download-70.cgi |
MySQL | 5.6.25-winx64 | http://dev.mysql.com/downloads/mysql/ |
InnoSetup | 5.5.5 | http://jrsoftware.org/isdl.php |
下载地址指到下载页面,需要读者打开自己选择下载.
在需求转换中,包含一个隐形需求却MySQL,JAVA,和配置命令是有系统的局限限制的.所以不同的系统应该要有不同的安装包.在选择打包软件上综合各种的因素我最终选择了”Inno Setup Compiler”,这个不是把这篇博文的重点.
Tomcat的配置中,我设计成把JDK和Tomcat绑定在一起,因此把JAVA的JDK文件夹放在tomcat的bin目录下,然后在bin目录下创建setenv.bat
文件.
setnv.bat
的内容为:set "JAVA_HOME=%~dp0\Java\jdk1.6.0_45"
set "JAVA_OPTS= -Dfile.encoding=UTF-8 -Duser.timezone=GMT+8"
这里的JAVA_HOME,在catalina.bat
文件里要求必须使用JDK(Java Develpment Kit){1},且JAVA_OPTS是可选.
Service.bat
内容在tomcat的bin目录下的Service.bat文件内容下”:gotJdkHome” 节下添加下面内容:
:gotJdkHome
set "%JAVA_HOME%=%~dp0\Java\jdk1.6.0_45"
set "JRE_HOME="%JAVA_HOME%\jre"
变成
:gotJdkHome
set "%JAVA_HOME%=%~dp0\Java\jdk1.6.0_45"
set "JRE_HOME="%JAVA_HOME%\jre"
if not exist "%JAVA_HOME%\jre\bin\java.exe" goto noJavaHome
if not exist "%JAVA_HOME%\jre\bin\javaw.exe" goto noJavaHome
if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome
if not "%JRE_HOME%" == "" goto okJavaHome
set "JRE_HOME=%JAVA_HOME%\jre"
goto okJavaHome
在:gotJreHome节下添加下面的内容:
:gotJreHome
set "JRE_HOME= %GCIEMS_JAVA%\jre"
变成
:gotJreHome
set "JRE_HOME= %GCIEMS_JAVA%\jre"
if not exist "%JRE_HOME%\bin\java.exe" goto noJavaHome
if not exist "%JRE_HOME%\bin\javaw.exe" goto noJavaHome
在:installed节下添加下面的内容:
sc config tomcat7w_Gciems start=auto
net start tomcat7w_Gciems
变成
:installed
echo The service '%SERVICE_NAME%' has been installed.
sc config tomcat7w_Gciems start=auto
net start tomcat7w_Gciems
:installed
echo The service '%SERVICE_NAME%' has been installed.
sc config Tomcat7 start=auto
net start Tomcat7
这段主要是启动Tomcat7的Service,和把Tomcat7设置成为自动启动
启动服务.bat
“%~dp0%\service.bat” install
我个人不喜欢用 %cd%
这个命令,会影响到目录的判断,产生误会.
关闭服务.bat
在下面添加代码
netsh advfirewall firewall delete rule name=”Tomcat_Gciems端口” dir=in protocol=TCP localport=8080
echo 关闭端口…成功
net stop tomcat7
sc.exe delete tomcat7
这段代码主要是删除tomcat 服务.
我用 MySQLMigrationTool
对项目的数据库经行转换成SQLCreates.sql
、和Inserts.sql
,然后放在MySQL目录下的data 目录下.
我用 MySQLMigrationTool
对数据库下的MySQL数据库下的db表和 user表转换成SQL,命名为InitUserInformations.sql
,然后放在MySQL目录下的data 目录下.
在tomcat目录下my-default.ini
,修改mysqld
章节成为:
[mysqld]
basedir =
datadir =
port =3306
# server_id = .....
basedir
是指向mysql的目录,datadir
是指向数据库目录地址,port
是指mysql 的服务端口
在MySQL 的bin目录下创建启动服务.bat
,加入下面的代码
cd /d %~dp0
“%cd%\mysqld.exe” –install MySQL_Gciems
net start MySQL_Gciems
sc config MySQL_Gciems start=auto
echo 安装完毕
“%cd%\mysqladmin” -u root password jiesaigciems
echo 修改密码完毕
cd ..
“%cd%\bin\mysql.exe” -uroot -pjiesaigciems < “%cd%\data\Creates.sql”
“%cd%\bin\mysql.exe” -uroot -pjiesaigciems < “%cd%\data\Inserts.sql”
echo 建表完毕
“%cd%\bin\mysql.exe” -uroot -pjiesaigciems < use mysql < “%cd%\data\InitUserInformations.sql”
echo 建立新用户完毕
在Tomcat的bin下的启动服务.bat
添加下面的代码,注意不能加在.. service.bat install
之后,因为在 service.bat
的 goto end
; 这段代码,会直接让bat文件结束,所以要再Service.bat install
之前.
netsh advfirewall firewall add rule name="Tomcat_Gciems端口" dir=in protocol=TCP localport=8080 action=allow
"%~dp0%\service.bat" install
在
在Tomcat 的bin目录下的关闭服务.bat
加入下面的代码
netsh advfirewall firewall delete rule name="Tomcat_Gciems端口" dir=in protocol=TCP localport=8080
echo 关闭端口...成功
在MySQL 的 bin目录下的打开服务.bat
加入下面的代码:
netsh advfirewall firewall add rule name="MySQL_Gciems端口" dir=in protocol=TCP localport=3066 action=allow
echo 增加防火墙端口成功
在MySQL的bin目录下的关闭服务.bat
加入下面的代码:
netsh advfirewall firewall delete rule name="MySQL_Gciems端口" dir=in protocol=TCP localport=3306
net stop MySQL_Gciems
打开Inno Setup软件,在File运行new,创建新的项目.
按照它的提示填写信息,直到第三步Application Files的时候
在Add folder 按钮中添加Tomcat 和MySQL的 目录.
[Code]
procedure SetEnv(aEnvName, aEnvValue: string; aIsInstall, aIsInsForAllUser: Boolean);
var
sOrgValue: string;
S1, sFileName: string;
bRetValue, bInsForAllUser: Boolean;
SL: TStringList;
x: integer;
begin
bInsForAllUser := aIsInsForAllUser;
if UsingWinNT then
begin
if bInsForAllUser then
bRetValue := RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', aEnvName, sOrgValue)
else
bRetValue := RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', aEnvName, sOrgValue)
sOrgValue := Trim(sOrgValue);
begin
S1 := aEnvValue; //环境变量地址
if pos(Uppercase(s1), Uppercase(sOrgValue)) = 0 then //还没有加入到系统环境时
begin
if aIsInstall then
begin
x := Length(sOrgValue);
if (x > 0) and (StringOfChar(sOrgValue[x], 1) <> ';') then
sOrgValue := sOrgValue + ';';
sOrgValue := sOrgValue + S1;
end;
end else
begin
if not aIsInstall then
begin
StringChangeEx(sOrgValue, S1 + ';', '', True);
StringChangeEx(sOrgValue, S1, '', True);
end;
end;
if bInsForAllUser then //系统环境变量
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', aEnvName, sOrgValue)
else
begin
if (not aIsInstall) and (Trim(sOrgValue) = '') then
RegDeleteValue(HKEY_CURRENT_USER, 'Environment', aEnvName)
else
RegWriteStringValue(HKEY_CURRENT_USER, 'Environment', aEnvName, sOrgValue);
end;
end;
end else //非NT 系统,如Win98
begin
SL := TStringList.Create;
try
sFileName := ExpandConstant('{sd}\autoexec.bat');
LoadStringFromFile(sFileName, S1);
SL.Text := s1;
s1 := '"' + aEnvValue + '"';
s1 := 'set '+aEnvName +'=%path%;' + s1 ;
bRetValue := False;
x := SL.IndexOf(s1);
if x = -1 then
begin
if aIsInstall then
begin
SL.Add(s1);
bRetValue := True;
end;
end else //还没添加
if not aIsInstall then
begin
SL.Delete(x);
bRetValue := True;
end;
if bRetValue then
SL.SaveToFile(sFileName);
finally
SL.free;
end;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);//添加环境变量
begin
if CurStep = ssPostInstall then
begin
SetEnv('path',ExpandConstant('{app}/mysql-5.6.25-winx64/bin;'),true,true); //在这儿重写成你的MySQL 目录{app}是指你安装的父目录,一定在这儿调用,安装完无须重启,立即生效,
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);//删除环境变量
begin
SetEnv('path',ExpandConstant('{app}/mysql-5.6.25-winx64/bin;'),false,true);//同上
//SetEnv('path','{app}/bin',false,true);
end;
[INI]
Filename:”{app}\mysql-5.6.25-winx64\my-default.ini”;Section:”mysqld”;Key:”basedir”; String:”{app}\mysql-5.6.25-winx64”
Filename:”{app}\mysql-5.6.25-winx64\my-default.ini”;Section:”mysqld”;Key:”datadir”; String:”{app}\mysql-5.6.25-winx64\data”
[Run]
Filename: “{app}\apache-tomcat-7.0.59-windows-x64\apache-tomcat-7.0.59\bin\启动服务.bat”;
Filename: “{app}\mysql-5.6.25-winx64\bin\启动服务.bat”;
[UninstallRun]
Filename: “{app}\apache-tomcat-7.0.59-windows-x64\apache-tomcat-7.0.59\bin\卸载服务.bat”;
Filename: “{app}\mysql-5.6.25-winx64\bin\卸载服务.bat”;
这步骤很重要,如果安装的时候没有该权限,则会发生tomcat注册不到服务,MySQL 运行不了等错误.
“请求系统管理员权限”,需要在安装脚本,的tools->Options勾上”Always Launch Setup/Uninstall as administrator”就可以了.
我用的Tomcat,MySQL 都是64位的,32位的不支持.为了减少错误,需要在[Setup]章节中添加
ArchitecturesAllowed=x64;
"ArchitecturesInstallIn64BitMode=x64" requests that the install be
; done in "64-bit mode" on x64, meaning it should use the native
; 64-bit Program Files directory and the 64-bit view of the registry.
; On all other architectures it will install in "32-bit mode".
ArchitecturesInstallIn64BitMode=x64;
按菜单的Build-> Compile ,或按 “Ctrl+F9” 经行编译,编译的文件默认跟脚本同一目录下的output 目录下.
Refer
[1]Catalina.bat,tomcat的bin目录45行