正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本文主要是打包JSP+TOMCAT+JDK+MYSQL。
首先下载InstallShield软件,现在版本很多,但是脚本代码几乎差不多的。
其次下载Tomcat绿色版,MYSQL绿色版,把安装过的JDK拷贝一份。
再次把数据库文件放到MYSQL目录下,把项目放到TOMCAT下。
一切准备就绪,我们就开始了。。。。
1.设置安装语言,在选择项目后,如果选择的多种安装语言,则安装程序运行时首先让选择安装语言,此处不需我们写脚本。如果只有一种语言则安装时不弹出选择语言对话框。
2.设置启动画面,只需要把默认的图片更换即可,不过图片名称不能改变。
3.如何判断操作系统,代码如下:
- Function OnBegin()
- Begin
- if ( !SYSINFO.bIntel) then
- szMsg = "提示:该软件只能运行在Intel系列的处理器上!/n/n安装程序将终止";
- MessageBox(szMsg, SEVERE);
- abort;
- endif;
- if (SYSINFO.WIN9X.bWinMe ||
- SYSINFO.WINNT.bWinNT ||
- SYSINFO.WINNT.bWinNT4 ||
- SYSINFO.WINNT.bWin2000) then
- szMsg = "提示:该软件只能运行在WIN9X系统上才能确保程序的正常工作!/n/n是否继续安装?";
- if ( !AskYesNo (szMsg, NO)) then
- abort;
- endif;
- endif;
- end
复制代码
4.操作系统内存容量判断
- if (GetSystemInfo (EXTENDEDMEMORY, nvFreeMem, svResult) < 0) then
- MessageBox ("内存检测失败,安装程序将终止!.", SEVERE);
- abort;
- endif;
- if ( nvFreeMem < 16384 ) then
- szMsg = "该软件只能安装在16M以上内存的机器中。/n很遗憾,本机器可用内存不足16M!/n/n安装程序将终止!"; MessageBox (szMsg, SEVERE);
- abort;
- endif;
复制代码
5.序列号的生成(首先获得磁盘序列,然后生成序列号)
- NUMBER volumeNum;
- //Before using the GetVolumeInformation API you will need to prototype it
- prototype KERNEL32.GetVolumeInformation (BYREF STRING, BYREF STRING, NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF STRING, NUMBER);
- //prototype for the custom InstallScript function
- prototype GetVolumeSerial();
- //function definition
- function GetVolumeSerial()
- STRING lpRootPathName;
- STRING lpVolumeNameBuffer;
- NUMBER nVolumeNameSize;
- NUMBER lpVolumeSerialNumber;
- NUMBER lpMaximumComponentLength;
- NUMBER lpFileSystemFlags;
- STRING lpFileSystemNameBuffer;
- NUMBER nFileSystemNameSize;
- BOOL APIReturn;
- begin
- lpRootPathName="d://";
- nVolumeNameSize=60;
- nFileSystemNameSize=60;
- //APIReturn=GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);
- APIReturn=GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);
-
-
- if (APIReturn) then
-
- volumeNum = lpVolumeSerialNumber ;
- if (volumeNum < 0) then
- volumeNum = 0 - volumeNum;
- endif;
- //NumToStr(volumeNum,lpVolumeSerialNumber);
- //SprintfBox(INFORMATION, "", "Volume= %s/nVolume Serial= %d", lpRootPathName, lpVolumeSerialNumber);
- if (volumeNum > 2139999999 - 135792468) then
-
- //volumeNum = 123456789;
- volumeNum = volumeNum - volumeNum/100000000*100000000;
- endif;
-
- else
-
- volumeNum = 123456789;
- //MessageBox("Failure.",0);
- endif;
- end ;
- prototype getNumString();
- function getNumString()
- number numSpace;
- number numMen;
- string tmpString;
- begin
- //tmpNum = GetWindowHandle(HWND_INSTALL); //安装主窗口的句柄
- //numSpace = GetDiskSpace("c://"); //指定驱动器上的空闲磁盘空间
- numSpace = GetDiskSpaceEx("c://",KBYTES); //指定驱动器上的空闲磁盘空间 BYTES
- //numMen = GetMemFree(); //运行在Microsoft Windows下的一个应用程序可用的内存大小
- numMen = GetDiskSpaceEx("d://",KBYTES);
- if numSpace < 10000 then
- numSpace = 11360000;
- else
- numSpace = (numSpace - numSpace/10000*10000)*10000;
- endif;
- if numMen < 10000 then
- numMen = 7521;
- else
- numMen = numMen - numMen/10000*10000;
- endif;
- volumeNum = 100000000 + numSpace + numMen;
-
- //NumToStr(tmpString,volumeNum);
- // MessageBox(tmpString,0);
- end;
-
- GetVolumeSerial();
- tmpNum = volumeNum;
- tmpNum = tmpNum - tmpNum / 100 * 100;
- NumToStr(tmpCheckString,tmpNum);
- if (tmpCheckString == "0") then
- tmpCheckString = "0X";
- endif;
- checkString = "B" + tmpCheckString + "_";
- tmpNum = volumeNum / 100;
- tmpNum = tmpNum - tmpNum / 100 * 100;
- NumToStr(tmpCheckString,tmpNum);
- if (tmpCheckString == "0") then
- tmpCheckString = "0X";
- endif;
- checkString = checkString + "K" + tmpCheckString + "_";
- tmpNum = volumeNum / 10000;
- tmpNum = tmpNum - tmpNum / 100 * 100;
- NumToStr(tmpCheckString,tmpNum);
- if (tmpCheckString == "0") then
- tmpCheckString = "0X";
- endif;
- checkString = checkString + "X" + tmpCheckString + "_";
- tmpNum = volumeNum / 1000000;
- tmpNum = tmpNum - tmpNum / 100 * 100;
- NumToStr(tmpCheckString,tmpNum);
- if (tmpCheckString == "0") then
- tmpCheckString = "0X";
- endif;
- checkString = checkString + "T" + tmpCheckString;
-
- //MessageBox(checkString,INFORMATION);
-
- //变换volumeNum的值
- //B3242_K423_X342_T3423
- volumeNum = volumeNum + 135792468;
- NumToStr(localNum,volumeNum);
复制代码
6.安装协议对话框代码(其中license.txt是安装协议内容)
- Dlg_Start:
- // beginning of dialogs label
- Dlg_SdWelcome:
- szTitle = "xx系统";
- szMsg = "安装程序即将在本机上安装xx系统,确定是否继续安装?继续请按【下一步(next)】";
- nResult = SdWelcome( szTitle, szMsg );
- if (nResult = BACK) goto Dlg_Start;
- Dlg_SdLicense:
- szLicenseFile = SUPPORTDIR ^ "license.txt";
- szTitle = "xx系统";
- szMsg = "";
- szQuestion = "您是否接受该协议?接受请按【是(Yes)】。继续安装必须接受该协议。";
- nResult = SdLicense( szTitle, szMsg, szQuestion, szLicenseFile );
- if (nResult = BACK) goto Dlg_SdWelcome;
复制代码
7.用户信息对话框(其中序列号checkString是上篇中,安装程序根据磁盘序列及 我们设置的编码规则生成的字符串)
- Dlg_SdShowInfoList:
- szTitle = "系统本地编号";
- szMsg = "将下面的本地编号发送给权限授予机构,在接收到相应的注册码后,您将进行继续注册!";
- szField1 = "编号";
- svEdit1 = localNum;
- nResult = SdShowDlgEdit1(szTitle, szMsg,szField1, svEdit1);
- if (nResult = BACK) goto Dlg_SdWelcome;
- Dlg_SdRegisterUserEx:
- szMsg = "";
- szTitle = "";
- nResult = SdRegisterUserEx( szTitle, szMsg, szName, szCompany, szSerial );
- if (nResult = BACK) goto Dlg_SdShowInfoList;
- if (szSerial != checkString) then
- MessageBox( "错误!", SEVERE);
- goto Dlg_SdRegisterUserEx;
- endif;
- ListDestroy( list );
- if (nResult = BACK) goto Dlg_SdLicense;
复制代码
8、选择安装路径(包括判断磁盘容量)
- Dlg_SdAskDestPath: szTitle = "";
- szMsg = "";
- svTemp = szDir;
- nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );
- if ( svTemp != szDir) then
- szDir = szDir^@COMPANY_NAME ^@PRODUCT_NAME;
- endif;
- TARGETDIR = szDir;
- GetDisk (szDir, svDrive);
- lFreeSpace = GetDiskSpace (svDrive);
- if (lFreeSpace < 209715200) then
- MessageBox("警告:安装路径所在的磁盘空间不足200M!请重新选择!",SEVERE);
- goto Dlg_SdAskDestPath;
- endif;
- if (nResult = BACK) goto Dlg_SdRegisterUserEx;
复制代码
9.安装类型对话框
- Dlg_SetupType:
- szTitle = "xx系统";
- szMsg = "";
- nResult = SetupType ( szTitle , szMsg , "" , nSetupType , 0 );
- if (nResult = BACK) then
- //goto Dlg_SdAskDestPath;
- goto Dlg_SdRegisterUserEx
- else
- nSetupType = nResult;
- if (nSetupType != CUSTOM) then
- szTargetPath = TARGETDIR;
- nvSize = 0;
- ComponentCompareSizeRequired(MEDIA,szTargetPath,nvSize);
- if (nvSize != 0) then
- MessageBox( szSdStr_NotEnoughSpace, WARNING );
- goto Dlg_SetupType;
- endif;
- endif;
- endif;
复制代码
10.复制文件,并且显示用户的配置信息,显示文件复制进度条
- Dlg_ObjDialogs:
- nResult = ShowObjWizardPages(nResult);
- if (nResult = BACK) goto Dlg_SdComponentTree;
- Dlg_SdStartCopy:
- szTitle = "xx系统";
- szMsg = "安装信息准备完毕,并且获得安装权限,下一步将进行文件拷贝。";
- listStartCopy = ListCreate( STRINGLIST );
-
- ListAddString(listStartCopy,"客户信息:",AFTER);
- ListAddString(listStartCopy,"用户名:" + szName,AFTER);
- ListAddString(listStartCopy,"用户单位:" + szCompany,AFTER);
- ListAddString(listStartCopy,"",AFTER);
- ListAddString(listStartCopy,"程序安装路径:" + szDir,AFTER);
- ListAddString(listStartCopy,"",AFTER);
- //ListAddString(listStartCopy,"程序文件夹:" + szfolder,AFTER);
- ListAddString(listStartCopy,"",AFTER);
-
- switch (nSetupType)
- case TYPICAL : ListAddString(listStartCopy,"安装类型:典型安装",AFTER);
- case COMPACT: ListAddString(listStartCopy,"安装类型:压缩安装",AFTER);
- case CUSTOM: ListAddString(listStartCopy,"安装类型:自定义安装",AFTER);
- endswitch;
- nResult = SdStartCopy( szTitle, szMsg, listStartCopy );
- ListDestroy(listStartCopy);
- if (nResult = BACK) goto Dlg_ObjDialogs;
- SetStatusWindow(0, "");
- Enable(STATUSEX);
- StatusUpdate(ON, 100);
- return 0;
- end;
复制代码
11、配置MYSQL服务器
修改my.ini文件
[mysqld]
# 设置mysql的安装目录
basedir=$MYSQL_HOME
# 设置mysql数据库的数据的存放目录,必须是data,或者是//xxx/data
datadir=$MYSQL_HOME/data
# 设置mysql服务器的字符集
default-character-set=utf8
[client]
# 设置mysql客户端的字符集
default-character-set=gbk
12、安装MYSQL服务
- LaunchAppAndWait(TARGETDIR+"//MYSQL//bin//mysqld.exe","--install MySQL --defaults-file=:/Dev/mysql-5.0.45/my.ini",WAIT);
复制代码
13、启动MYSQL服务
- LaunchAppAndWait ("net","start mysql",WAIT );
复制代码
14、配置JAVA和TOMCAT环境变量,并且启动TOMCAT
- catalina_home=TARGETDIR + "//apache-tomcat-5.5.12";
- java_home=TARGETDIR + "//jdk1.5.0_05";
- szKey="Environment";
- RegDBSetDefaultRoot(HKEY_CURRENT_USER);
- RegDBSetKeyValueEx(szKey,"JAVA_HOME",REGDB_STRING,java_home,-1);
- RegDBSetKeyValueEx(szKey,"CATALINA_HOME",REGDB_STRING,catalina_home,-1);
- szEnv = "Environment";
- pEnv = &szEnv;
- SendMessage (0xffff, 0x001A , 0, pEnv );
复制代码
15、启动TOMCAT
- LaunchAppAndWait(TARGETDIR+"//apache-tomcat-5.5.12//bin//startup.bat","",WAIT);
复制代码
16、创建开始菜单快捷方式,创建桌面快捷方式,创建URL快捷方式,打开浏览器
- szFolderName = FOLDER_STARTMENU;
- CreateProgramFolder(szFolderName);
- szCommandLine = TARGETDIR ^ "apache-tomcat-5.5.12//bin//startup.bat";
- szCommandLine = "/"" + szCommandLine + "/"";
- szFolderName = "xx//xx.exe";
- AddFolderIcon(FOLDER_PROGRAMS, szFolderName, szCommandLine, TARGETDIR, "", 0, "", REPLACE);
- szCommandLine = TARGETDIR ^ "apache-tomcat-5.5.12//bin//startup.bat";
- szCommandLine = "/"" + szCommandLine + "/"";
- szFolderName = "xx";
- if (AddFolderIcon (FOLDER_DESKTOP, szFolderName, szCommandLine, TARGETDIR,
- "", 0, "", REPLACE) < 0) then
- MessageBox ("安装程序在进行桌面上添加快捷方式失败,稍侯请自己添加!.", SEVERE);
- endif;
- OpenFileMode (FILE_MODE_APPEND);
- if(CreateFile (nvFileHandle, FOLDER_DESKTOP, "xx.url")>=0) then;
- WriteLine (nvFileHandle, "[InternetShortcut]");
- WriteLine (nvFileHandle, "URL=http://LocalHost:8080/index.jsp");
- WriteLine (nvFileHandle, "IconFile=" + TARGETDIR ^ "images//icon.ico");
- WriteLine (nvFileHandle, "IconIndex=0");
- CloseFile (nvFileHandle);
- else
- MessageBox ("桌面快捷方式创建失败!",SEVERE);
- endif;
- szCmdLine = "http://LocalHost:8080/index.jsp";
- if (LaunchApp(PROGRAMFILES ^"Internet Explorer"^"IEXPLORE.EXE", szCmdLine) < 0) then
- MessageBox ("不能打开浏览器.",SEVERE);
- endif;
复制代码
17、卸载应用程序:关闭TOMCAT,关闭MYSQL。删除注册表,删除环境变量,删除快捷方式。
- LaunchAppAndWait("net","stop mysql",WAIT);
- LaunchAppAndWait(TARGETDIR+"//apache-tomcat-5.5.12//bin//shutdown.bat","",WAIT);
- LaunchAppAndWait(TARGETDIR+"//MYSQL//bin//mysqld.exe","--remove MySQL",WAIT);
-
- RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
- szSubKey = "CATALINA_HOME";
- szValue = TARGETDIR + "//apache-tomcat-5.5.12";
- RegDBDeleteValue(szSubKey,szValue);
- szSubKey = "JAVA_HOME";
- szValue = TARGETDIR + "//jdk1.5.0_05";
- RegDBDeleteValue(szSubKey,szValue);
-
- DeleteFolderIcon (FOLDER_PROGRAMS,"xx");
- DeleteFolderIcon (FOLDER_PROGRAMS,"xx");
- DeleteFolderIcon (FOLDER_DESKTOP,"xx") ;
复制代码
|