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

参考图片—

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

五、    打包脚本准备

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

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将通不过编译。

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

六、    开始打包

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

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

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

Java web系统打包成exe安装文件相关推荐

  1. 把web程序打包成exe安装文件

    先安装 Nativefier--可以把网页打包成exe的工具 Nativefier需要 nodejs 环境支持,先安装nodejs. 下载地址:https://nodejs.org/en/,安装完成后 ...

  2. Python打包成exe,文件太大问题解决办法

    Python打包成exe,文件太大问题解决办法 原因 解决办法 具体步骤 情况一:初次打包 情况二:再次打包 原因 由于使用pyinstaller打包.py文件时,会把很多已安装的无关库同时打包进去, ...

  3. python随笔:用pyinstaller 将python代码打包成exe执行文件

    1.前言 经过几个星期的努力,终于完成了一个PyQt5项目.但日常使用或给别人使用代码模式非常不便,所以就产生了把代码打包成exe执行文件的想法. 2.pyinstaller 安装 在命令行执行以下语 ...

  4. 关于如何将java桌面程序打包成exe可执行文件

    一.先把java文件打包成jar 在Eclipse中在你要打包的项目上右击(如图我想打包一个叫graphicproject的项目) 出来一个快捷菜单,点Export,然后Next,出现如下界面注意把红 ...

  5. Java桌面程序打包成exe可执行文件

    前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: ecl ...

  6. python文件打包成.exe运行文件

    现在用博客的形式记载的,大概也只有IT行业一直持续吧!作为一名IT民工,没有特别多特别深的行业见解,初涉江湖,记录自己走过的路途的风景,日后回望也会觉得清晰:如果有幸能给他人一些启发或者参照,那也算是 ...

  7. python打包成exe导入文件_Pyinstaller(python打包为exe文件)

    需求分析: python脚本如果在没有安装python的机器上不能运行,所以将脚本打包成exe文件,降低脚本对环境的依赖性,同时运行更加迅速. 当然打包的脚本似乎不是在所有的win平台下都能使用,wi ...

  8. java普通项目打包成exe可执行文件

    · 提示,无论打包成jar还是exe程序,运行都需要JDK,需要给没有安装JDK的电脑安装: · maven项目有自己的打jar包方式,我们普通的java项目,可以安照步骤一打包成jar: 步骤一.先 ...

  9. python打包成exe导入文件_【转载】将python脚本打包成exe文件

    标签: exe文件也就是可以直接执行的文件.通常我们编好的带py后缀的脚本文件都是需要在有python的环境下执行, 每次通过Win + R打开运行窗口再输入powershell打开控制台,再千辛万苦 ...

最新文章

  1. Android中Parcel的分析和使用
  2. 抽象类、抽象方法与代码块
  3. leetcode647. 回文子串(动态规划)
  4. 转载 | Systemd的使用简介
  5. 线性表的顺序存储C++代码实现
  6. 使用matlab生成含正弦波表数据ROM
  7. inkscape矢量图_使用Inkscape创建矢量图形的教程
  8. 多种企业常用网管软件介绍及配置说明(带视频)
  9. 低通滤波与RC振荡产生正弦波
  10. python社交网络图
  11. 一篇文章带你搞定 create connection SQLException, url: jdbc:mysql://10.15.16.63:3306/restful, errorCode 1130
  12. NeurIPS十年高引学者TOP100榜单发布!这些大牛值得膜拜!
  13. 简述扁平式管理的技术手段
  14. “德阳造”水上智能清污机器人 一次可收集500公斤垃圾
  15. 计算机模拟图像和数字,模拟与数字的区别
  16. lcd屏幕有mipi接口吗_液晶屏mipi接口能用的最大分辨率是多少
  17. Apache HttpClient连接池泄露问题排查
  18. 关于tarjan的浅解
  19. 杀linux进程的几种命令详解
  20. Spring IOC循环依赖问题

热门文章

  1. Guitar Pro8.0吉他打谱作曲中文版有哪些新功能?
  2. Vue技术栈(全家桶)
  3. 【精品】防止表单重复提交 方法汇总
  4. 官方微信支付跟特约商户的区别
  5. Marvin is plain Jane WriteUp_实验吧_Crypto
  6. 永磁直驱风力发电机组并网仿真模型搭建
  7. java 面试知识点笔记(七)多线程与并发 上篇
  8. SQL中的declare用法
  9. iphone相册源码下载(仿three20)
  10. AppStore上线审核