Java web系统打包成exe安装文件

Java web系统打包成exe安装文件

一、    工具准备

1、        NSIS打包工具: http://nsis.sourceforge.net下载并安装;

2、        NSIS安装脚本的编辑器HM NIS Editor:

             http://hmne.sourceforge.net下载并安装

二、    运行环境准备—JDK

1、新建打包用的文件夹(本人是在D盘根目录下创建的webExe,即D:\webExe);

2、JDK本人用的是jdk-6u18,将安装好的JDK目录直接拷贝到目录webExe下就行(绿色版本的也可以)。

三、    应用程序准备—Tomcat及web应用系统

1、   免安装版本的tomcat,本人用的是apache-tomcat-6.0.35,将其放到目录webExe下,并将Web应用系统发布进webapps中。

四、    数据库准备—mysql及数据

1、        下载一个免安装版本的mysql(本人操作系统是WIN 7 32位,下载的是mysql-noinstall-v5.1.55.zip),解压缩到D盘;

2、        将主目录名mysql-5.1.55-win32修改为简单的mysql5(不修改也行,建议修改简单);

3、        找到文件my-small.ini改名为my.ini(也可以是将my-huge.ini、my-large.ini、my-medium.ini中任意一个改名为my.ini);

4、        将my.ini打开进行配置:

   

[mysqld]

port     = 3306

socket   = MySQL

default-character-set =utf8     --服务器端

basedir=D:/mysql5        --路径

datadir=D:/mysql5/data     --数据库路径

default-storage-engine= MyISAM   --默认数据库引擎为MyISAM

5、        在本地启动服务,导入数据库及数据

(如果本机已经安装了mysql,记得关掉当前的服务)

运行cmd.exe进入DOS窗口,进到D:\mysql5\bin目录

注册服务: 

mysqld --install mysql5--defaults-file=d:\mysql5\my.ini

可能会出现Install/Remove of the Service Denied! 错误,这时要关闭DOS窗口,以管理员的身份运行cmd.exe程序。

启动服务:net start mysql5

使用命令或mysql第三方客户端,创建数据库并导入数据

停止服务:net stop mysql5

参考图片—

Java web系统打包成exe安装文件_第1张图片

 

6、        停止服务后,将mysql5整个目录剪切到目录webExe下

五、    打包脚本准备

1、        当前目录情况如下图:

Java web系统打包成exe安装文件_第2张图片

2、        脚本文件AddPath.nsh(复制到编辑器HM NIS Edit中保存nsh类型)

!ifndef _AddToPath_nsh

!define _AddToPath_nsh

 

!verbose 3

!include "WinMessages.NSH"

!verbose 4

 

!ifndef WriteEnvStr_RegKey

 !ifdef ALL_USERS

   !define WriteEnvStr_RegKey \

      'HKLM "SYSTEM\CurrentControlSet\Control\SessionManager\Environment"'

 !else

   !define WriteEnvStr_RegKey 'HKCU "Environment"'

 !endif

!endif

 

; AddToPath - Adds the given dir to thesearch path.

;       Input - head of the stack

;       Note - Win9x systems requires reboot

 

Function AddToPath

 Exch $0

 Push $1

 Push $2

 Push $3

 

  #don't add if the path doesn't exist

 IfFileExists "$0\*.*" "" AddToPath_done

 

 ReadEnvStr $1 PATH

 Push "$1;"

 Push "$0;"

 Call StrStr

  Pop$2

 StrCmp $2 "" "" AddToPath_done

 Push "$1;"

 Push "$0\;"

 Call StrStr

  Pop$2

 StrCmp $2 "" "" AddToPath_done

 GetFullPathName /SHORT $3 $0

 Push "$1;"

 Push "$3;"

 Call StrStr

  Pop$2

 StrCmp $2 "" "" AddToPath_done

 Push "$1;"

 Push "$3\;"

 Call StrStr

  Pop$2

 StrCmp $2 "" "" AddToPath_done

 

 Call IsNT

  Pop$1

 StrCmp $1 1 AddToPath_NT

    ;Not on NT

   StrCpy $1 $WINDIR 2

   FileOpen $1 "$1\autoexec.bat" a

   FileSeek $1 -1 END

   FileReadByte $1 $2

   IntCmp $2 26 0 +2 +2 # DOS EOF

     FileSeek $1 -1 END # write over EOF

   FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"

    FileClose$1

   SetRebootFlag true

   Goto AddToPath_done

 

 AddToPath_NT:

   ReadRegStr $1 ${WriteEnvStr_RegKey} "PATH"

   StrCmp $1 "" AddToPath_NTdoIt

     Push $1

     Call Trim

     Pop $1

     StrCpy $0 "$1;$0"

   AddToPath_NTdoIt:

     WriteRegExpandStr ${WriteEnvStr_RegKey} "PATH" $0

     SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0"STR:Environment" /TIMEOUT=5000

 

 AddToPath_done:

   Pop $3

   Pop $2

   Pop $1

   Pop $0

FunctionEnd

 

; RemoveFromPath - Remove a given dir fromthe path

;    Input: head of the stack

 

Function un.RemoveFromPath

 Exch $0

 Push $1

 Push $2

 Push $3

 Push $4

 Push $5

 Push $6

 

 IntFmt $6 "%c" 26 # DOS EOF

 

 Call un.IsNT

  Pop$1

 StrCmp $1 1 unRemoveFromPath_NT

    ;Not on NT

   StrCpy $1 $WINDIR 2

   FileOpen $1 "$1\autoexec.bat" r

   GetTempFileName $4

   FileOpen $2 $4 w

   GetFullPathName /SHORT $0 $0

   StrCpy $0 "SET PATH=%PATH%;$0"

   Goto unRemoveFromPath_dosLoop

 

   unRemoveFromPath_dosLoop:

     FileRead $1 $3

      StrCpy $5 $3 1 -1 # read last char

     StrCmp $5 $6 0 +2 # if DOS EOF

       StrCpy $3 $3 -1 # remove DOS EOF so we can compare

     StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine

     StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine

      StrCmp $3 "$0"unRemoveFromPath_dosLoopRemoveLine

     StrCmp $3 "" unRemoveFromPath_dosLoopEnd

     FileWrite $2 $3

     Goto unRemoveFromPath_dosLoop

     unRemoveFromPath_dosLoopRemoveLine:

       SetRebootFlag true

       Goto unRemoveFromPath_dosLoop

 

   unRemoveFromPath_dosLoopEnd:

     FileClose $2

     FileClose $1

     StrCpy $1 $WINDIR 2

     Delete "$1\autoexec.bat"

     CopyFiles /SILENT $4 "$1\autoexec.bat"

     Delete $4

     Goto unRemoveFromPath_done

 

 unRemoveFromPath_NT:

   ReadRegStr $1 ${WriteEnvStr_RegKey} "PATH"

   StrCpy $5 $1 1 -1 # copy last char

   StrCmp $5 ";" +2 # if last char != ;

     StrCpy $1 "$1;" # append ;

   Push $1

   Push "$0;"

   Call un.StrStr ; Find `$0;` in $1

   Pop $2 ; pos of our dir

    StrCmp $2 "" unRemoveFromPath_done

     ; else, it is in path

     # $0 - path to add

     # $1 - path var

     StrLen $3 "$0;"

     StrLen $4 $2

     StrCpy $5 $1 -$4 # $5 is now the part before the path to remove

     StrCpy $6 $2 "" $3 # $6 is now the part after the path toremove

     StrCpy $3 $5$6

 

     StrCpy $5 $3 1 -1 # copy last char

     StrCmp $5 ";" 0 +2 # if last char == ;

       StrCpy $3 $3 -1 # remove last char

 

     WriteRegExpandStr ${WriteEnvStr_RegKey} "PATH" $3

     SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0"STR:Environment" /TIMEOUT=5000

 

 unRemoveFromPath_done:

   Pop $6

   Pop $5

   Pop $4

   Pop $3

   Pop $2

   Pop $1

   Pop $0

FunctionEnd

 

 

 

; AddToEnvVar - Adds the given value to thegiven environment var

;       Input - head of the stack $0 environement variable $1=value to add

;       Note - Win9x systems requires reboot

 

Function AddToEnvVar

 

 Exch $1 ; $1 has environment variable value

 Exch

 Exch $0 ; $0 has environment variable name

 

 DetailPrint "Adding $1 to $0"

 Push $2

 Push $3

 Push $4

 

 

 ReadEnvStr $2 $0

 Push "$2;"

 Push "$1;"

 Call StrStr

  Pop$3

 StrCmp $3 "" "" AddToEnvVar_done

 

 Push "$2;"

 Push "$1\;"

 Call StrStr

  Pop$3

 StrCmp $3 "" "" AddToEnvVar_done

 

 

 Call IsNT

  Pop$2

 StrCmp $2 1 AddToEnvVar_NT

    ;Not on NT

   StrCpy $2 $WINDIR 2

   FileOpen $2 "$2\autoexec.bat" a

   FileSeek $2 -1 END

   FileReadByte $2 $3

   IntCmp $3 26 0 +2 +2 # DOS EOF

     FileSeek $2 -1 END # write over EOF

   FileWrite $2 "$\r$\nSET $0=%$0%;$4$\r$\n"

   FileClose $2

   SetRebootFlag true

   Goto AddToEnvVar_done

 

 AddToEnvVar_NT:

   ReadRegStr $2 ${WriteEnvStr_RegKey} $0

   StrCpy $3 $2 1 -1 # copy last char

   StrCmp $3 ";" 0 +2 # if last char == ;

     StrCpy $2 $2 -1 # remove last char

   StrCmp $2 "" AddToEnvVar_NTdoIt

     StrCpy $1 "$2;$1"

   AddToEnvVar_NTdoIt:

     WriteRegExpandStr ${WriteEnvStr_RegKey} $0 $1

     SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0"STR:Environment" /TIMEOUT=5000

 

 AddToEnvVar_done:

   Pop $4

   Pop $3

   Pop $2

   Pop $0

   Pop $1

 

FunctionEnd

 

; RemoveFromEnvVar - Remove a given valuefrom a environment var

;    Input: head of the stack

 

Function un.RemoveFromEnvVar

 

 Exch $1 ; $1 has environment variable value

 Exch

 Exch $0 ; $0 has environment variable name

 

 DetailPrint "Removing $1 from $0"

 Push $2

 Push $3

 Push $4

 Push $5

 Push $6

 Push $7

 

 IntFmt $7 "%c" 26 # DOS EOF

 

 Call un.IsNT

  Pop$2

 StrCmp $2 1 unRemoveFromEnvVar_NT

    ;Not on NT

   StrCpy $2 $WINDIR 2

   FileOpen $2 "$2\autoexec.bat" r

   GetTempFileName $5

   FileOpen $3 $5 w

   GetFullPathName /SHORT $1 $1

   StrCpy $1 "SET $0=%$0%;$1"

   Goto unRemoveFromEnvVar_dosLoop

 

   unRemoveFromEnvVar_dosLoop:

     FileRead $2 $4

     StrCpy $6 $4 1 -1 # read last char

     StrCmp $6 $7 0 +2 # if DOS EOF

       StrCpy $4 $4 -1 # remove DOS EOF so we can compare

     StrCmp $4 "$1$\r$\n" unRemoveFromEnvVar_dosLoopRemoveLine

     StrCmp $4 "$1$\n" unRemoveFromEnvVar_dosLoopRemoveLine

     StrCmp $4 "$1" unRemoveFromEnvVar_dosLoopRemoveLine

     StrCmp $4 "" unRemoveFromEnvVar_dosLoopEnd

     FileWrite $3 $4

     Goto unRemoveFromEnvVar_dosLoop

     unRemoveFromEnvVar_dosLoopRemoveLine:

       SetRebootFlag true

       Goto unRemoveFromEnvVar_dosLoop

 

   unRemoveFromEnvVar_dosLoopEnd:

     FileClose $3

     FileClose $2

     StrCpy $2 $WINDIR 2

     Delete "$2\autoexec.bat"

     CopyFiles /SILENT $5 "$2\autoexec.bat"

     Delete $5

      Goto unRemoveFromEnvVar_done

 

 unRemoveFromEnvVar_NT:

   ReadRegStr $2 ${WriteEnvStr_RegKey} $0

   StrCpy $6 $2 1 -1 # copy last char

   StrCmp $6 ";" +2 # if last char != ;

     StrCpy $2 "$2;" # append ;

   Push $2

   Push "$1;"

   Call un.StrStr ; Find `$1;` in $2

   Pop $3 ; pos of our dir

   StrCmp $3 "" unRemoveFromEnvVar_done

     ; else, it is in path

     # $1 - path to add

     # $2 - path var

     StrLen $4 "$1;"

     StrLen $5 $3

     StrCpy $6 $2 -$5 # $6 is now the part before the path to remove

     StrCpy $7 $3 "" $4 # $7 is now the part after the path toremove

     StrCpy $4 $6$7

 

     StrCpy $6 $4 1 -1 # copy last char

     StrCmp $6 ";" 0 +2 # if last char == ;

     StrCpy $4 $4 -1 # remove last char

 

     WriteRegExpandStr ${WriteEnvStr_RegKey} $0 $4

 

     ; delete reg value if null

     StrCmp $4 "" 0 +2 # if null delete reg

     DeleteRegValue ${WriteEnvStr_RegKey} $0

 

     SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0"STR:Environment" /TIMEOUT=5000

 

 unRemoveFromEnvVar_done:

   Pop $7

   Pop $6

   Pop $5

   Pop $4

   Pop $3

   Pop $2

   Pop $1

   Pop $0

FunctionEnd

 

 

 

 

!ifndef IsNT_KiCHiK

!define IsNT_KiCHiK

 

###########################################

#           Utility Functions            #

###########################################

 

; IsNT

; no input

; output, top of the stack = 1 if NT or 0if not

;

; Usage:

;  Call IsNT

;  Pop $R0

; ($R0 at this point is 1 or 0)

 

!macro IsNT un

Function ${un}IsNT

 Push $0

 ReadRegStr $0 HKLM "SOFTWARE\Microsoft\WindowsNT\CurrentVersion" CurrentVersion

 StrCmp $0 "" 0 IsNT_yes

  ;we are not NT.

  Pop$0

 Push 0

 Return

 

 IsNT_yes:

    ;NT!!!

   Pop $0

   Push 1

FunctionEnd

!macroend

!insertmacro IsNT ""

!insertmacro IsNT "un."

 

!endif ; IsNT_KiCHiK

 

; StrStr

; input, top of stack = string to searchfor

;       top of stack-1 = string to search in

; output, top of stack (replaces with theportion of the string remaining)

; modifies no other variables.

;

; Usage:

;  Push "this is a long ass string"

;  Push "ass"

;  Call StrStr

;  Pop $R0

; ($R0 at this point is "ass string")

 

!macro StrStr un

Function ${un}StrStr

Exch $R1 ; st=haystack,old$R1, $R1=needle

 Exch    ; st=old$R1,haystack

 Exch $R2 ; st=old$R1,old$R2, $R2=haystack

 Push $R3

 Push $R4

 Push $R5

 StrLen $R3 $R1

 StrCpy $R4 0

  ;$R1=needle

  ;$R2=haystack

  ;$R3=len(needle)

  ;$R4=cnt

  ;$R5=tmp

 loop:

   StrCpy $R5 $R2 $R3 $R4

   StrCmp $R5 $R1 done

   StrCmp $R5 "" done

   IntOp $R4 $R4 + 1

    Goto loop

done:

 StrCpy $R1 $R2 "" $R4

  Pop$R5

  Pop$R4

  Pop$R3

  Pop$R2

 Exch $R1

FunctionEnd

!macroend

!insertmacro StrStr ""

!insertmacro StrStr "un."

 

!endif ; _AddToPath_nsh

 

Function Trim ; Added by Pelaca

  Exch$R1

  Push$R2

Loop:

  StrCpy$R2 "$R1" 1 -1

  StrCmp"$R2" " " RTrim

  StrCmp"$R2" "$\n" RTrim

  StrCmp"$R2" "$\r" RTrim

  StrCmp"$R2" ";" RTrim

  GoToDone

RTrim:   

  StrCpy$R1 "$R1" -1

  GotoLoop

Done:

  Pop$R2

  Exch$R1

FunctionEnd

3、        脚本文件WriteEnvStr.nsh(复制到编辑器HM NIS Edit中保存nsh类型)

!ifndef _WriteEnvStr_nsh

!define _WriteEnvStr_nsh

 

!include WinMessages.nsh

 

!ifndef WriteEnvStr_RegKey

 !ifdef ALL_USERS

   !define WriteEnvStr_RegKey \

      'HKLM "SYSTEM\CurrentControlSet\Control\SessionManager\Environment"'

 !else

   !define WriteEnvStr_RegKey 'HKCU "Environment"'

 !endif

!endif

 

#

# WriteEnvStr - Writes an environmentvariable

# Note: Win9x systems requires reboot

#

# Example:

# Push "HOMEDIR"          # name

# Push "C:\New Home Dir\" # value

# Call WriteEnvStr

#

Function WriteEnvStr

 Exch $1 ; $1 has environment variable value

 Exch

 Exch $0 ; $0 has environment variable name

 Push $2

 

 Call IsNT

  Pop$2

 StrCmp $2 1 WriteEnvStr_NT

    ;Not on NT

   StrCpy $2 $WINDIR 2 ; Copy drive of windows (c:)

   FileOpen $2 "$2\autoexec.bat" a

   FileSeek $2 0 END

   FileWrite $2 "$\r$\nSET $0=$1$\r$\n"

   FileClose $2

   SetRebootFlag true

   Goto WriteEnvStr_done

 

 WriteEnvStr_NT:

     WriteRegExpandStr ${WriteEnvStr_RegKey} $0 $1

     SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} \

       0 "STR:Environment" /TIMEOUT=5000

 

 WriteEnvStr_done:

   Pop $2

   Pop $0

   Pop $1

FunctionEnd

 

#

# un.DeleteEnvStr - Removes an environmentvariable

# Note: Win9x systems requires reboot

#

# Example:

# Push "HOMEDIR"           # name

# Call un.DeleteEnvStr

#

Function un.DeleteEnvStr

 Exch $0 ; $0 now has the name of the variable

 Push $1

 Push $2

 Push $3

 Push $4

 Push $5

 

 Call un.IsNT

  Pop$1

 StrCmp $1 1 DeleteEnvStr_NT

    ;Not on NT

   StrCpy $1 $WINDIR 2

   FileOpen $1 "$1\autoexec.bat" r

   GetTempFileName $4

   FileOpen $2 $4 w

   StrCpy $0 "SET $0="

   SetRebootFlag true

 

   DeleteEnvStr_dosLoop:

     FileRead $1 $3

     StrLen $5 $0

     StrCpy $5 $3 $5

     StrCmp $5 $0 DeleteEnvStr_dosLoop

     StrCmp $5 "" DeleteEnvStr_dosLoopEnd

     FileWrite $2 $3

     Goto DeleteEnvStr_dosLoop

 

   DeleteEnvStr_dosLoopEnd:

     FileClose $2

     FileClose $1

     StrCpy $1 $WINDIR 2

     Delete "$1\autoexec.bat"

     CopyFiles /SILENT $4 "$1\autoexec.bat"

     Delete $4

     Goto DeleteEnvStr_done

 

 DeleteEnvStr_NT:

   DeleteRegValue ${WriteEnvStr_RegKey} $0

   SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} \

     0 "STR:Environment" /TIMEOUT=5000

 

 DeleteEnvStr_done:

   Pop $5

    Pop$4

   Pop $3

   Pop $2

   Pop $1

   Pop $0

FunctionEnd

 

!ifndef IsNT_KiCHiK

!define IsNT_KiCHiK

 

#

# [un.]IsNT - Pushes 1 if running on NT, 0if not

#

# Example:

#  Call IsNT

#  Pop $0

#  StrCmp $0 1 +3

#    MessageBox MB_OK "Not running on NT!"

#    Goto +2

#    MessageBox MB_OK "Running on NT!"

#

!macro IsNT UN

Function ${UN}IsNT

 Push $0

 ReadRegStr $0 HKLM \

   "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion

 StrCmp $0 "" 0 IsNT_yes

  ;we are not NT.

  Pop$0

 Push 0

 Return

 

 IsNT_yes:

    ;NT!!!

   Pop $0

   Push 1

FunctionEnd

!macroend

!insertmacro IsNT ""

!insertmacro IsNT "un."

 

!endif ; IsNT_KiCHiK

 

!endif ; _WriteEnvStr_nsh

4、        脚本文件JDevIns.nsi    (将以下脚本内容保存为nsi类型)

(这个是主脚本,依赖于前两个脚本,复制到编辑器HM NIS Edit中,根据自己的具体情况做相应修改)

 

; Script generated by the HM NIS EditScript Wizard.

 

; HM NIS Edit Wizard helper defines

!define PRODUCT_NAME "AAA"

!define PRODUCT_VERSION "2.0"

!define PRODUCT_PUBLISHER "AAA科技股份有限公司"

!define PRODUCT_UNINST_KEY"Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"

!define PRODUCT_UNINST_ROOT_KEY"HKLM"

!define PRODUCT_STARTMENU_REGVAL"NSIS:sTARTmENUdIR"

 

SetCompressor lzma

 

; MUI 1.67 compatible ------

!include "MUI.nsh"

 

;Register Environmnet Variable

!include AddPath.nsh

!include WriteEnvStr.nsh

; MUI Settings

!define MUI_ABORTWARNING

!define MUI_ICON"${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"

!define MUI_UNICON"${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico"

 

; Welcome page

!insertmacro MUI_PAGE_WELCOME

; 许可协议页面

!insertmacro MUI_PAGE_LICENSE"rights.txt"

; Components page

!insertmacro MUI_PAGE_COMPONENTS

; Directory page

;!insertmacro MUI_PAGE_DIRECTORY

; Start menu page

var ICONS_GROUP

!define MUI_STARTMENUPAGE_NODISABLE

!define MUI_STARTMENUPAGE_DEFAULTFOLDER"AAA信息管理系统"

!define MUI_STARTMENUPAGE_REGISTRY_ROOT"${PRODUCT_UNINST_ROOT_KEY}"

!define MUI_STARTMENUPAGE_REGISTRY_KEY"${PRODUCT_UNINST_KEY}"

!defineMUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}"

!insertmacro MUI_PAGE_STARTMENU Application$ICONS_GROUP

; Instfiles page

!insertmacro MUI_PAGE_INSTFILES

; Finish page

;!define MUI_FINISHPAGE_RUN"$INSTDIR\tomcat6\bin\startup.bat"

!insertmacro MUI_PAGE_FINISH

 

; Uninstaller pages

!insertmacro MUI_UNPAGE_INSTFILES

 

; Language files

!insertmacro MUI_LANGUAGE"SimpChinese"

 

; Reserve files

!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

 

;Section Description

;!insertmacroMUI_FUNCTION_DESCRIPTION_BEGIN

 ;!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Tomcat6.0.35 JDK6u18,MySql5.1.55 必选项"

; !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "AAA信息管理系统运行环境,[必选]"

; !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "AAA信息管理系统网络服务,[必选]"

; !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} "AAA信息管理系统数据库,[必选]"

;!insertmacro MUI_FUNCTION_DESCRIPTION_END

 

; MUI end ------

Name "${PRODUCT_NAME}${PRODUCT_VERSION}"

BRANDINGTEXT "AAA科技股份有限公司"

OutFile "AAA-install.exe"

;InstallDir"$PROGRAMFILES\application"

InstallDir "D:\aaa"

ShowInstDetails show

ShowUnInstDetails show

 

;define install type

InstType "完全"

;install type end------

 

;Define for Environment Variables

!define JAVA_HOME"$INSTDIR\jdk1618"

!define CATALINA_HOME"$INSTDIR\tomcat6"

!define MYSQL_HOME"$INSTDIR\mysql5"

 

Section "JDK6u18" SEC02

 sectionin 1

  sectioninRO

 SetOutPath "$INSTDIR\jdk1618"

 SetOverwrite try

 File /r "D:\webExe\jdk1618\*.*"

SectionEnd

 

Section "Tomcat6" SEC03

 sectionin 1

 sectionin RO

 SetOutPath "$INSTDIR\tomcat6"

 SetOverwrite try

 File /r "D:\webExe\tomcat6\*.*"

SectionEnd

 

Section "MySQL5" SEC04

 sectionin 1

 sectionin RO

 SetOutPath "$INSTDIR\mysql5"

 SetOverwrite try

 File /r "D:\webExe\mysql5\*.*"

SectionEnd

 

Section -EnvironmentVariables

 ;WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\SessionManager\Environment" "JAVA_HOME" "${JAVA_HOME}"

 Push JAVA_HOME

 Push '${JAVA_HOME}'

 Call WriteEnvStr

 Push '${JAVA_HOME}\bin'

 Call AddToPath

;Set CATALINA_HOME Environment Variable

 Push CATALINA_HOME

 Push '${CATALINA_HOME}'

 Call WriteEnvStr

 Push '${CATALINA_HOME}\bin'

 Call AddToPath

;Set MYSQL_HOME Environment Variable

 Push MYSQL_HOME

 Push '${MYSQL_HOME}'

 Call WriteEnvStr

 Push '${MYSQL_HOME}\bin'

 Call AddToPath

SectionEnd

 

;Application StartMenu Directory

Section -AdditionalIcons

 SetOutPath $INSTDIR

 !insertmacro MUI_STARTMENU_WRITE_BEGIN Application

 CreateDirectory "$SMPROGRAMS\$ICONS_GROUP"

 CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\AAA.lnk""http://localhost:8080/"

 CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk""$INSTDIR\uninst.exe"

 !insertmacro MUI_STARTMENU_WRITE_END

SectionEnd

 

;

Section -Post

 WriteUninstaller "$INSTDIR\uninst.exe"

 

 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""DisplayName" "$(^Name)"

 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""UninstallString" "$INSTDIR\uninst.exe"

 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""DisplayVersion" "${PRODUCT_VERSION}"

 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""Publisher" "${PRODUCT_PUBLISHER}"

 

SectionEnd

 

Section -Service

 Call InstallTomcatService

 Call InstallMySQLService

 Call StartService

SectionEnd

 

 

;Install Mysql Service

Function InstallMySQLService

ExecWait "$INSTDIR\mysql5\bin\mysqld--install mysql5 --defaults-file=$INSTDIR\mysql5\my.ini"

FunctionEnd

 

Function InstallTomcatService

SetOutPath "$INSTDIR\tomcat6\bin"

ExecWait "service.bat install"

ExecWait "sc config tomcat6 start=auto"

FunctionEnd

 

Function StartService

ExecWait "net start mysql5"

ExecWait "net start tomcat6"

FunctionEnd

;Stop MySQL Service

Function un.stopService

ExecWait "net stop tomcat6"

ExecWait "net stop mysql5"

functionend

;Delete MySQL Service

function un.removeService

ExecWait "$INSTDIR\mysql5\bin\mysqld-remove"

functionend

 

function un.removeTomcatService

SetOutPath "$INSTDIR\tomcat6\bin"

ExecWait "service.bat remove"

functionend

 

Function un.onUninstSuccess

 HideWindow

 MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从你的计算机移除。"

FunctionEnd

 

Function un.onInit

 MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,其及所有的组件?" IDYES +2

 Abort

 ;call un.removeFileType

FunctionEnd

 

Function un.removeEnvPath

 Push CATALINA_HOME

 Call un.DeleteEnvStr

 Push ${CATALINA_HOME}\bin

 Call un.RemoveFromPath

 

 Push MYSQL_HOME

 Call un.DeleteEnvStr

 Push ${MYSQL_HOME}\bin

 Call un.RemoveFromPath

 

 Push JAVA_HOME

 Call un.DeleteEnvStr

 Push ${JAVA_HOME}\bin

 Call un.RemoveFromPath

FunctionEnd

 

Section Uninstall

 Call un.stopService

 Call un.removeTomcatService

 Call un.removeService

 !insertmacro MUI_STARTMENU_GETFOLDER "Application"$ICONS_GROUP

 Delete "$INSTDIR\${PRODUCT_NAME}.url"

 Delete "$INSTDIR\uninst.exe"

 Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk"

 Delete "$SMPROGRAMS\$ICONS_GROUP\AAA.lnk"

 Delete "$DESKTOP\AAA.lnk"

 RMDir "$SMPROGRAMS\$ICONS_GROUP"

 RMDir /r "$INSTDIR\jdk1618"

 RMDir /r "$INSTDIR\mysql5"

 RMDir /r "$INSTDIR\tomcat6"

 RMDir /r "$INSTDIR"

 DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY}"${PRODUCT_UNINST_KEY}"

 DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"

 Call un.removeEnvPath

 SetAutoClose true

SectionEnd

 

5、        安装许可协议rights.txt (复制保存为rights.txt)

AAA科技软件授权许可协议

 

   AAA科技股份有限公司(以下简称AAA科技)独立开发软件, AAA科技依法享有该软件之版权和著作权:

 

        AAA科技软件以商业收费方式提供,许可授权用户使用,但该软件的授权使用者(含个人、法人或其它组织)必须遵守以下许可协议:

 

1、 AAA科技将 AAA科技软件授权提供给授权用户,同时提供相关的安装说明、使用说明等文档。授权用户依法享有该软件的使用权,依法享有 AAA科技在所承诺的服务期限内提供的安装、升级和技术支持服务。

 

2、除被授权方外的任何第三方无权使用该许可软件或其中任何一部分。任何人无权将该许可软件或其中任何一部分向他人出售、出租、转让权利或者以其他形式进行转让或提供利用。 任何人不得对本软件进行反向工程、反编译或者反汇编工作。

对违反此授权协议行为的个人、法人或其它组织,必须立即停止其行为造成的一切不良后果承担全部责任。对此前,尤其是此后的行为,将依据《著作权法》、《计算机软件保护条例》等相关法律、法规追究其经济和法律责任。

 

 AAA科技保留对此协议的最终解释权,任何用户使用本软件则表示默认接受此协议。

 

                                  AAA科技股份有限公司

                          二零一二年十一月

6、        脚本存放位置

AddPath.nsh、WriteEnvStr.nsh脚本要拷贝到NSIS(注意,不是HM NIS Editor)安装目录中的Include子目录中,否则JDevIns.nsi将通不过编译。

Java web系统打包成exe安装文件_第3张图片

JDevIns.nsi、rights.txt放在打包文件目录D:\webExe中

Java web系统打包成exe安装文件_第4张图片

六、    开始打包

通过NSIS对JDevIns.nsi脚本文件进行编译就开始打包了。

(右键JDevIns.nsi选择Compile NSIS Script即可)

打包速度与web应用系统大小和数据库数据多少有关,本人大概花了15分钟左右。



你可能感兴趣的:(java)