杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2422|回复: 0

InstallShield制作JSP+TOMCAT+JDK+MYSQL

[复制链接]
发表于 2018-5-24 21:45:34 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本文主要是打包JSP+TOMCAT+JDK+MYSQL。

首先下载InstallShield软件,现在版本很多,但是脚本代码几乎差不多的。

其次下载Tomcat绿色版,MYSQL绿色版,把安装过的JDK拷贝一份。

再次把数据库文件放到MYSQL目录下,把项目放到TOMCAT下。

一切准备就绪,我们就开始了。。。。

1.设置安装语言,在选择项目后,如果选择的多种安装语言,则安装程序运行时首先让选择安装语言,此处不需我们写脚本。如果只有一种语言则安装时不弹出选择语言对话框。

2.设置启动画面,只需要把默认的图片更换即可,不过图片名称不能改变。

3.如何判断操作系统,代码如下:

  1. Function OnBegin()
  2. Begin
  3. if ( !SYSINFO.bIntel) then
  4. szMsg = "提示:该软件只能运行在Intel系列的处理器上!/n/n安装程序将终止";
  5. MessageBox(szMsg, SEVERE);
  6. abort;
  7. endif;
  8. if (SYSINFO.WIN9X.bWinMe ||  
  9. SYSINFO.WINNT.bWinNT ||  
  10. SYSINFO.WINNT.bWinNT4 ||  
  11. SYSINFO.WINNT.bWin2000) then
  12. szMsg = "提示:该软件只能运行在WIN9X系统上才能确保程序的正常工作!/n/n是否继续安装?";
  13. if ( !AskYesNo (szMsg, NO)) then  
  14. abort;
  15. endif;
  16. endif;
  17. end
复制代码



4.操作系统内存容量判断

  1. if (GetSystemInfo (EXTENDEDMEMORY, nvFreeMem, svResult) < 0) then
  2. MessageBox ("内存检测失败,安装程序将终止!.", SEVERE);
  3. abort;
  4. endif;
  5. if ( nvFreeMem < 16384 ) then  
  6. szMsg = "该软件只能安装在16M以上内存的机器中。/n很遗憾,本机器可用内存不足16M!/n/n安装程序将终止!"; MessageBox (szMsg, SEVERE);
  7. abort;
  8. endif;
复制代码



5.序列号的生成(首先获得磁盘序列,然后生成序列号)

  1. NUMBER volumeNum;   
  2. //Before using the GetVolumeInformation API you will need to prototype it   
  3. prototype KERNEL32.GetVolumeInformation (BYREF STRING, BYREF STRING, NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF NUMBER, BYREF STRING, NUMBER);   
  4. //prototype for the custom InstallScript function   
  5. prototype GetVolumeSerial();   
  6. //function definition   
  7. function GetVolumeSerial()   
  8. STRING lpRootPathName;   
  9. STRING lpVolumeNameBuffer;   
  10. NUMBER nVolumeNameSize;   
  11. NUMBER lpVolumeSerialNumber;   
  12. NUMBER lpMaximumComponentLength;   
  13. NUMBER lpFileSystemFlags;   
  14. STRING lpFileSystemNameBuffer;   
  15. NUMBER nFileSystemNameSize;   
  16. BOOL APIReturn;   
  17. begin   
  18.   lpRootPathName="d://";   
  19.   nVolumeNameSize=60;   
  20.   nFileSystemNameSize=60;   
  21.   //APIReturn=GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize,   lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);   
  22.   APIReturn=GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize,   lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);   
  23.    
  24.    
  25.   if (APIReturn) then           
  26.    
  27.    volumeNum = lpVolumeSerialNumber ;   
  28.    if (volumeNum < 0) then   
  29.     volumeNum = 0 - volumeNum;   
  30.    endif;        
  31.    //NumToStr(volumeNum,lpVolumeSerialNumber);   
  32.     //SprintfBox(INFORMATION, "", "Volume= %s/nVolume Serial= %d", lpRootPathName, lpVolumeSerialNumber);   
  33.    if (volumeNum > 2139999999 - 135792468) then         
  34.    
  35.     //volumeNum = 123456789;   
  36.     volumeNum = volumeNum - volumeNum/100000000*100000000;   
  37.    endif;        
  38.       
  39.   else                       
  40.    
  41.      volumeNum = 123456789;   
  42.     //MessageBox("Failure.",0);   
  43.   endif;   
  44. end ;   
  45. prototype getNumString();   
  46. function getNumString()   
  47.   number numSpace;   
  48.   number numMen;   
  49.   string tmpString;   
  50. begin                                          
  51.      //tmpNum = GetWindowHandle(HWND_INSTALL);  //安装主窗口的句柄   
  52.      //numSpace = GetDiskSpace("c://"); //指定驱动器上的空闲磁盘空间   
  53.      numSpace = GetDiskSpaceEx("c://",KBYTES); //指定驱动器上的空闲磁盘空间        BYTES   
  54.      //numMen = GetMemFree();  //运行在Microsoft Windows下的一个应用程序可用的内存大小      
  55.      numMen = GetDiskSpaceEx("d://",KBYTES);   
  56.      if numSpace < 10000 then   
  57.         numSpace = 11360000;   
  58.      else  
  59.       numSpace = (numSpace - numSpace/10000*10000)*10000;   
  60.      endif;   
  61.      if numMen < 10000 then   
  62.         numMen = 7521;     
  63.      else  
  64.       numMen = numMen - numMen/10000*10000;   
  65.      endif;                                                     
  66.      volumeNum = 100000000 + numSpace + numMen;   
  67.       
  68.      //NumToStr(tmpString,volumeNum);        
  69.     // MessageBox(tmpString,0);                              
  70. end;   



  71. GetVolumeSerial();                       
  72.     tmpNum =  volumeNum;               
  73.     tmpNum = tmpNum - tmpNum / 100 * 100;     
  74.     NumToStr(tmpCheckString,tmpNum);      
  75.     if (tmpCheckString == "0") then   
  76.       tmpCheckString = "0X";   
  77.     endif;   
  78.     checkString = "B" + tmpCheckString + "_";        
  79.     tmpNum =  volumeNum / 100;               
  80.     tmpNum = tmpNum - tmpNum / 100 * 100;     
  81.     NumToStr(tmpCheckString,tmpNum);      
  82.     if (tmpCheckString == "0") then   
  83.       tmpCheckString = "0X";   
  84.     endif;   
  85.     checkString = checkString + "K" + tmpCheckString + "_";   
  86.     tmpNum =  volumeNum / 10000;               
  87.     tmpNum = tmpNum - tmpNum / 100 * 100;     
  88.     NumToStr(tmpCheckString,tmpNum);     
  89.     if (tmpCheckString == "0") then   
  90.       tmpCheckString = "0X";   
  91.     endif;   
  92.     checkString = checkString + "X" + tmpCheckString + "_";   
  93.     tmpNum =  volumeNum / 1000000;               
  94.     tmpNum = tmpNum - tmpNum / 100 * 100;     
  95.     NumToStr(tmpCheckString,tmpNum);   
  96.     if (tmpCheckString == "0") then   
  97.       tmpCheckString = "0X";   
  98.     endif;   
  99.     checkString = checkString + "T" + tmpCheckString;   
  100.                                                       
  101.     //MessageBox(checkString,INFORMATION);   
  102.          
  103.     //变换volumeNum的值   
  104.     //B3242_K423_X342_T3423      
  105.     volumeNum = volumeNum + 135792468;              
  106.     NumToStr(localNum,volumeNum);
复制代码


6.安装协议对话框代码(其中license.txt是安装协议内容)

  1. Dlg_Start:   
  2.     // beginning of dialogs label   
  3. Dlg_SdWelcome:   
  4.     szTitle = "xx系统";   
  5.     szMsg   = "安装程序即将在本机上安装xx系统,确定是否继续安装?继续请按【下一步(next)】";   
  6.     nResult = SdWelcome( szTitle, szMsg );   
  7.     if (nResult = BACK) goto Dlg_Start;  

  8. Dlg_SdLicense:   
  9.     szLicenseFile = SUPPORTDIR ^ "license.txt";
  10.     szTitle    = "xx系统";
  11.     szMsg      = "";
  12.     szQuestion = "您是否接受该协议?接受请按【是(Yes)】。继续安装必须接受该协议。";
  13.     nResult    = SdLicense( szTitle, szMsg, szQuestion, szLicenseFile );
  14.     if (nResult = BACK) goto Dlg_SdWelcome;
复制代码


7.用户信息对话框(其中序列号checkString是上篇中,安装程序根据磁盘序列及   我们设置的编码规则生成的字符串)

  1. Dlg_SdShowInfoList:        
  2.     szTitle = "系统本地编号";   
  3.     szMsg    = "将下面的本地编号发送给权限授予机构,在接收到相应的注册码后,您将进行继续注册!";        
  4.     szField1 = "编号";   
  5.     svEdit1 = localNum;   
  6.     nResult = SdShowDlgEdit1(szTitle, szMsg,szField1, svEdit1);         
  7.     if (nResult = BACK) goto Dlg_SdWelcome;   
  8. Dlg_SdRegisterUserEx:   
  9.     szMsg   = "";   
  10.     szTitle = "";         
  11.     nResult = SdRegisterUserEx( szTitle, szMsg, szName, szCompany, szSerial );   
  12.     if (nResult = BACK) goto Dlg_SdShowInfoList;   
  13.     if (szSerial != checkString)  then        
  14.         MessageBox( "错误!", SEVERE);   
  15.        goto Dlg_SdRegisterUserEx;      
  16.     endif;   
  17. ListDestroy( list );
  18. if (nResult = BACK) goto Dlg_SdLicense;
复制代码


8、选择安装路径(包括判断磁盘容量)

  1. Dlg_SdAskDestPath:     szTitle = "";
  2.     szMsg   = "";
  3.     svTemp = szDir;
  4.     nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );
  5.     if ( svTemp != szDir) then  
  6.   szDir = szDir^@COMPANY_NAME ^@PRODUCT_NAME;
  7. endif;
  8. TARGETDIR = szDir;
  9. GetDisk (szDir, svDrive);
  10. lFreeSpace = GetDiskSpace (svDrive);
  11. if (lFreeSpace < 209715200) then  
  12. MessageBox("警告:安装路径所在的磁盘空间不足200M!请重新选择!",SEVERE);
  13. goto Dlg_SdAskDestPath;
  14. endif;
  15.     if (nResult = BACK) goto Dlg_SdRegisterUserEx;
复制代码


9.安装类型对话框

  1. Dlg_SetupType:         
  2.     szTitle    = "xx系统";
  3.     szMsg      = "";
  4.     nResult = SetupType ( szTitle , szMsg , "" , nSetupType , 0 );
  5.     if (nResult = BACK) then
  6.         //goto Dlg_SdAskDestPath;
  7.         goto Dlg_SdRegisterUserEx
  8.     else
  9.         nSetupType = nResult;
  10.         if (nSetupType != CUSTOM) then
  11.         szTargetPath = TARGETDIR;
  12.         nvSize = 0;
  13.         ComponentCompareSizeRequired(MEDIA,szTargetPath,nvSize);
  14.         if (nvSize != 0) then      
  15.                 MessageBox( szSdStr_NotEnoughSpace, WARNING );
  16.             goto Dlg_SetupType;
  17.             endif;
  18.         endif;   
  19.     endif;
复制代码


10.复制文件,并且显示用户的配置信息,显示文件复制进度条

  1. Dlg_ObjDialogs:
  2.     nResult = ShowObjWizardPages(nResult);
  3.     if (nResult = BACK) goto Dlg_SdComponentTree;

  4. Dlg_SdStartCopy:   
  5.     szTitle = "xx系统";   
  6.     szMsg   = "安装信息准备完毕,并且获得安装权限,下一步将进行文件拷贝。";
  7.     listStartCopy = ListCreate( STRINGLIST );  


  8.     ListAddString(listStartCopy,"客户信息:",AFTER);
  9. ListAddString(listStartCopy,"用户名:" + szName,AFTER);
  10. ListAddString(listStartCopy,"用户单位:" + szCompany,AFTER);
  11. ListAddString(listStartCopy,"",AFTER);
  12. ListAddString(listStartCopy,"程序安装路径:" + szDir,AFTER);
  13. ListAddString(listStartCopy,"",AFTER);
  14. //ListAddString(listStartCopy,"程序文件夹:" + szfolder,AFTER);
  15. ListAddString(listStartCopy,"",AFTER);
  16.   
  17. switch (nSetupType)
  18. case TYPICAL : ListAddString(listStartCopy,"安装类型:典型安装",AFTER);
  19. case COMPACT: ListAddString(listStartCopy,"安装类型:压缩安装",AFTER);
  20. case CUSTOM: ListAddString(listStartCopy,"安装类型:自定义安装",AFTER);
  21. endswitch;


  22.     nResult = SdStartCopy( szTitle, szMsg, listStartCopy );
  23.     ListDestroy(listStartCopy);        
  24.     if (nResult = BACK) goto Dlg_ObjDialogs;   

  25.     SetStatusWindow(0, "");
  26.     Enable(STATUSEX);
  27.     StatusUpdate(ON, 100);

  28.     return 0;
  29. 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服务

  1. LaunchAppAndWait(TARGETDIR+"//MYSQL//bin//mysqld.exe","--install MySQL --defaults-file=:/Dev/mysql-5.0.45/my.ini",WAIT);
复制代码


13、启动MYSQL服务

  1. LaunchAppAndWait ("net","start mysql",WAIT );
复制代码


14、配置JAVA和TOMCAT环境变量,并且启动TOMCAT

  1. catalina_home=TARGETDIR + "//apache-tomcat-5.5.12";   
  2.    java_home=TARGETDIR + "//jdk1.5.0_05";      
  3.    szKey="Environment";   
  4.    RegDBSetDefaultRoot(HKEY_CURRENT_USER);      
  5.    RegDBSetKeyValueEx(szKey,"JAVA_HOME",REGDB_STRING,java_home,-1);   
  6.    RegDBSetKeyValueEx(szKey,"CATALINA_HOME",REGDB_STRING,catalina_home,-1);   
  7.    szEnv = "Environment";   
  8.    pEnv = &szEnv;   
  9.    SendMessage (0xffff, 0x001A , 0, pEnv );
复制代码


15、启动TOMCAT

  1. LaunchAppAndWait(TARGETDIR+"//apache-tomcat-5.5.12//bin//startup.bat","",WAIT);
复制代码


16、创建开始菜单快捷方式,创建桌面快捷方式,创建URL快捷方式,打开浏览器

  1. szFolderName = FOLDER_STARTMENU;
  2.   CreateProgramFolder(szFolderName);   
  3.   szCommandLine = TARGETDIR ^ "apache-tomcat-5.5.12//bin//startup.bat";
  4.   szCommandLine = "/"" + szCommandLine + "/"";
  5.   szFolderName = "xx//xx.exe";
  6.   AddFolderIcon(FOLDER_PROGRAMS, szFolderName, szCommandLine, TARGETDIR, "", 0, "", REPLACE);

  7. szCommandLine = TARGETDIR ^ "apache-tomcat-5.5.12//bin//startup.bat";
  8.   szCommandLine = "/"" + szCommandLine + "/"";
  9.   szFolderName = "xx";
  10.   if (AddFolderIcon (FOLDER_DESKTOP, szFolderName, szCommandLine, TARGETDIR,
  11.   "", 0, "", REPLACE) < 0) then
  12.   MessageBox ("安装程序在进行桌面上添加快捷方式失败,稍侯请自己添加!.", SEVERE);
  13.   endif;

  14. OpenFileMode (FILE_MODE_APPEND);
  15.    if(CreateFile (nvFileHandle, FOLDER_DESKTOP, "xx.url")>=0) then;
  16.     WriteLine (nvFileHandle, "[InternetShortcut]");
  17.     WriteLine (nvFileHandle, "URL=http://LocalHost:8080/index.jsp");
  18.     WriteLine (nvFileHandle, "IconFile=" + TARGETDIR ^ "images//icon.ico");
  19.     WriteLine (nvFileHandle, "IconIndex=0");
  20.     CloseFile (nvFileHandle);
  21.    else
  22.      MessageBox ("桌面快捷方式创建失败!",SEVERE);
  23.    endif;

  24. szCmdLine = "http://LocalHost:8080/index.jsp";
  25.    if (LaunchApp(PROGRAMFILES ^"Internet Explorer"^"IEXPLORE.EXE", szCmdLine) < 0) then
  26.    MessageBox ("不能打开浏览器.",SEVERE);
  27.    endif;
复制代码


17、卸载应用程序:关闭TOMCAT,关闭MYSQL。删除注册表,删除环境变量,删除快捷方式。

  1.     LaunchAppAndWait("net","stop mysql",WAIT);
  2.     LaunchAppAndWait(TARGETDIR+"//apache-tomcat-5.5.12//bin//shutdown.bat","",WAIT);
  3.     LaunchAppAndWait(TARGETDIR+"//MYSQL//bin//mysqld.exe","--remove MySQL",WAIT);  
  4.    
  5.     RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);   
  6.     szSubKey = "CATALINA_HOME";   
  7.     szValue = TARGETDIR + "//apache-tomcat-5.5.12";     
  8.     RegDBDeleteValue(szSubKey,szValue);
  9.     szSubKey = "JAVA_HOME";   
  10.     szValue = TARGETDIR + "//jdk1.5.0_05";     
  11.     RegDBDeleteValue(szSubKey,szValue);
  12.    
  13.     DeleteFolderIcon (FOLDER_PROGRAMS,"xx");
  14.     DeleteFolderIcon (FOLDER_PROGRAMS,"xx");
  15.     DeleteFolderIcon (FOLDER_DESKTOP,"xx") ;
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-15 00:46 , Processed in 0.099048 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表