nsis打包php项目加环境,NSIS制作安装文件全攻略(一) zz

; NSIS 安装脚本示例 by haijd

; 参考: http://www.yonsm.net/read.php?58;

#=========================================================================================; 头文件!include"MUI.nsh"!include"Sections.nsh"!include"LogicLib.nsh"#=========================================================================================#=========================================================================================; 宏定义!define STR_AppName"易极OA协同办公系统"!define STR_Version"1.0"!define STR_Publisher"亿级空间"!define STR_HomepageUrl"http://www.eg-oa.com"!define REG_AppBase"Software\EgOA"!define REG_Uninstall"Software\Microsoft\Windows\CurrentVersion\Uninstall\${STR_AppName}"#=========================================================================================#=========================================================================================; MUI 设置!define MUI_ABORTWARNING!define MUI_ICON"${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"!define MUI_UNICON"${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico"!define MUI_WELCOMEFINISHPAGE_BITMAP"${NSISDIR}\Contrib\Graphics\Wizard\orange.bmp"!define MUI_UNWELCOMEFINISHPAGE_BITMAP"${NSISDIR}\Contrib\Graphics\Wizard\orange-uninstall.bmp"!define MUI_HEADERIMAGE!define MUI_HEADERIMAGE_BITMAP"${NSISDIR}\Contrib\Graphics\Header\orange.bmp"!define MUI_HEADERIMAGE_UNBITMAP"${NSISDIR}\Contrib\Graphics\Header\orange-uninstall.bmp"; 语言选择设置!define MUI_LANGDLL_REGISTRY_ROOT"HKCU"!define MUI_LANGDLL_REGISTRY_KEY"${REG_Uninstall}"!define MUI_LANGDLL_REGISTRY_VALUENAME"NSIS:Language"; 组件页面设置!define MUI_COMPONENTSPAGE_SMALLDESC

; 开始菜单页面设置

var STR_GroupName

var TMP_GroupName!define MUI_STARTMENUPAGE_REGISTRY_ROOT"HKCU"!define MUI_STARTMENUPAGE_REGISTRY_KEY"${REG_Uninstall}"!define MUI_STARTMENUPAGE_DEFAULTFOLDER"${STR_AppName}"!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME"NSIS:StartMenuDir"; 完成安装页面设置!define MUI_FINISHPAGE_RUN"C:\Program Files\Internet Explorer\iexplore.exe -new www.google.com"!define MUI_FINISHPAGE_SHOWREADME"$INSTDIR/help/index.html"!define MUI_FINISHPAGE_SHOWREADME_TEXT"$(LNG_ShowHelp)"!define MUI_FINISHPAGE_LINK"${STR_AppName} $(LNG_Homepage): ${STR_HomepageUrl}"!define MUI_FINISHPAGE_LINK_LOCATION"${STR_HomepageUrl}"; 安装页面!insertmacro MUI_PAGE_WELCOME!insertmacro MUI_PAGE_LICENSE"$(LNG_License)"!insertmacro MUI_PAGE_DIRECTORY!insertmacro MUI_PAGE_COMPONENTS!insertmacro MUI_PAGE_STARTMENU Application $STR_GroupName!insertmacro MUI_PAGE_INSTFILES!insertmacro MUI_PAGE_FINISH

; 卸载页面!insertmacro MUI_UNPAGE_WELCOME!insertmacro MUI_UNPAGE_CONFIRM!insertmacro MUI_UNPAGE_INSTFILES!insertmacro MUI_UNPAGE_FINISH

; 语言支持!insertmacro MUI_LANGUAGE"SimpChinese";!insertmacro MUI_LANGUAGE"English"#=========================================================================================#=========================================================================================; 语言相关字符串

LicenseLangString LNG_License ${LANG_ENGLISH}".\resource\EULA.txt"LangString LNG_BrandingText ${LANG_ENGLISH}"haijd Software"LangString LNG_DefaultInstation ${LANG_ENGLISH}"Default installtion"LangString LNG_FullInstation ${LANG_ENGLISH}"Full installtion"LangString LNG_MinimalInstation ${LANG_ENGLISH}"Minimal installtion"LangString LNG_Help ${LANG_ENGLISH}"Help"LangString LNG_Homepage ${LANG_ENGLISH}"Homepage"LangString LNG_Uninstall ${LANG_ENGLISH}"Uninstall"LangString LNG_ShowHelp ${LANG_ENGLISH}"Show Help"LangString LNG_ProgramFile ${LANG_ENGLISH}"Program Files"LangString LNG_EgOA ${LANG_ENGLISH}"Main program"LangString LNG_ServerEnv ${LANG_ENGLISH}"Services environment."LangString LNG_CreateShortcut ${LANG_ENGLISH}"Create Shortcut"LangString LNG_ProgramMenuShortcutGroup ${LANG_ENGLISH}"Program Menu Shortcut Group"LangString LNG_DesktopShortcut ${LANG_ENGLISH}"Desktop Shortcut"LangString LNG_QuickLaunchShortcut ${LANG_ENGLISH}"Quick Launch Bar Shortcut"LangString LNG_ProgramFileDesc ${LANG_ENGLISH}"Install ${STR_AppName} program files."LangString LNG_EgOADesc ${LANG_ENGLISH}"Install ${STR_AppName} main program files."LangString LNG_ServerEnvDesc ${LANG_ENGLISH}"Install ${STR_AppName} services environment."LangString LNG_CreateShortcutDesc ${LANG_ENGLISH}"Create shortcuts to launch the program easy."LicenseLangString LNG_License ${LANG_SIMPCHINESE}".\resource\EULA.txt"LangString LNG_BrandingText ${LANG_SIMPCHINESE}"haijd Software"LangString LNG_DefaultInstation ${LANG_SIMPCHINESE}"默认安装"LangString LNG_FullInstation ${LANG_SIMPCHINESE}"完全安装"LangString LNG_MinimalInstation ${LANG_SIMPCHINESE}"最小安装"LangString LNG_Help ${LANG_SIMPCHINESE}"帮助"LangString LNG_Homepage ${LANG_SIMPCHINESE}"主页"LangString LNG_Uninstall ${LANG_SIMPCHINESE}"卸载"LangString LNG_ShowHelp ${LANG_SIMPCHINESE}"查看帮助"LangString LNG_ProgramFile ${LANG_SIMPCHINESE}"程序文件"LangString LNG_EgOA ${LANG_SIMPCHINESE}"主程序"LangString LNG_ServerEnv ${LANG_SIMPCHINESE}"服务环境"LangString LNG_CreateShortcut ${LANG_SIMPCHINESE}"创建快捷方式"LangString LNG_ProgramMenuShortcutGroup ${LANG_SIMPCHINESE}"程序菜单快捷方式组"LangString LNG_DesktopShortcut ${LANG_SIMPCHINESE}"桌面快捷方式"LangString LNG_QuickLaunchShortcut ${LANG_SIMPCHINESE}"快速启动栏快捷方式"LangString LNG_ProgramFileDesc ${LANG_SIMPCHINESE}"安装 ${STR_AppName} 程序文件。"LangString LNG_EgOADesc ${LANG_SIMPCHINESE}"安装 ${STR_AppName} 主程序文件"LangString LNG_ServerEnvDesc ${LANG_SIMPCHINESE}"安装 ${STR_AppName} 服务环境"LangString LNG_CreateShortcutDesc ${LANG_SIMPCHINESE}"创建用于快速访问的快捷方式。"#=========================================================================================#=========================================================================================; 杂项

Name"${STR_AppName} ${STR_Version}"OutFile"${STR_AppName}_${STR_Version}.exe"InstallDir"$PROGRAMFILES\egoa"InstallDirRegKey HKCU"${REG_AppBase}""InstallDir"ShowInstDetails SHOW

ShowUnInstDetails SHOW

BrandingText"$(LNG_BrandingText)"#=========================================================================================#=========================================================================================; 安装类型!ifndef NOINSTTYPES

InstType"$(LNG_DefaultInstation)"InstType"$(LNG_FullInstation)"InstType"$(LNG_MinimalInstation)"!endif

#=========================================================================================#=========================================================================================; 程序文件

Section

LogSet on

SectionEnd

SectionGroup/e"$(LNG_ProgramFile)"SEC_ProgramFile

Section"$(LNG_EgOA)"SEC_EgOA

SectionIn123RO

SetOverwrite ON

SetOutPath"$INSTDIR"File".\resource\egoa.ico"File/r".\resource\program"SectionEnd

Section"$(LNG_ServerEnv)"SEC_ServerEnv

SectionIn123RO

SetOutPath"$INSTDIR"File/r".\resource\server"File/r".\resource\database"SectionEnd

Section"$(LNG_Help)"SEC_Help

SectionIn12SetOutPath"$INSTDIR"File/r".\resource\help"SectionEnd

SectionGroupEnd

#=========================================================================================#=========================================================================================; 快捷方式

SectionGroup"$(LNG_CreateShortcut)"SEC_Shortcut

; 创建开始菜单程序组

SectionGroup"$(LNG_ProgramMenuShortcutGroup)"SEC_ProgramMenuShortcutGroup

Section"${STR_AppName}"SEC_AppNameShortcut

SectionIn12CreateDirectory"$SMPROGRAMS\$STR_GroupName"WriteINIStr"$SMPROGRAMS\$STR_GroupName\${STR_AppName}.url""InternetShortcut""URL""$INSTDIR/program/www/index.html"SectionEnd

Section"${STR_AppName} $(LNG_Help)"SEC_HelpShortcut

SectionIn12CreateDirectory"$SMPROGRAMS\$STR_GroupName"WriteINIStr"$SMPROGRAMS\$STR_GroupName\${STR_AppName} $(LNG_Help).url""InternetShortcut""URL""$INSTDIR/program/www/help/index.html"SectionEnd

Section"${STR_AppName} $(LNG_Homepage)"SEC_HomePageShortcut

SectionIn12CreateDirectory"$SMPROGRAMS\$STR_GroupName"WriteINIStr"$SMPROGRAMS\$STR_GroupName\${STR_AppName} $(LNG_Homepage).url""InternetShortcut""URL""${STR_HomepageUrl}"SectionEnd

Section"$(LNG_Uninstall) ${STR_AppName}"SEC_UninstallShortcut

SectionIn12CreateDirectory"$SMPROGRAMS\$STR_GroupName"CreateShortCut"$SMPROGRAMS\$STR_GroupName\$(LNG_Uninstall) ${STR_AppName}.lnk""$INSTDIR\Uninstall.exe"SectionEnd

SectionGroupEnd

; 桌面

Section"$(LNG_DesktopShortcut)"SEC_DesktopShortcut

SectionIn12WriteINIStr"$DESKTOP\${STR_AppName}.url""InternetShortcut""URL""http://127.0.0.1/"SectionEnd

; 快速启动

Section"$(LNG_QuickLaunchShortcut)"SEC_QuickLaunchShortcut

SectionIn2WriteINIStr"$QUICKLAUNCH\${STR_AppName}.url""InternetShortcut""URL""http://127.0.0.1/"SectionEnd

SectionGroupEnd

#=========================================================================================#=========================================================================================# 替换文件内容用的宏!macro ReplaceConfig FileName StringOld StringNew

Push `${StringOld}`     #text to be replaced

Push `${StringNew}`     #replace with

Push all                #replace all occurrences

Push all                #replace all occurrences

Push `${FileName}`      #file to replaceinCall AdvReplaceInFile!macroend

#=========================================================================================#=========================================================================================; 配置服务

Section"-SettingServer"; 修改配置文件!insertmacro ReplaceConfig"$INSTDIR\server\Apache2.2\conf\httpd.conf""EGOA_BASE_PATH""$INSTDIR"!insertmacro ReplaceConfig"$INSTDIR\server\MySQL4.1\my.ini""EGOA_BASE_PATH""$INSTDIR"!insertmacro ReplaceConfig"$INSTDIR\server\php5\php.ini""EGOA_BASE_PATH""$INSTDIR"; 创建服务

nsExec::ExecToLog'"$INSTDIR\server\MySQL4.1\bin\mysqld-nt.exe" --install MySQL4.1 --defaults-file="$INSTDIR\server\MySQL4.1\my.ini"'nsExec::ExecToLog'"$INSTDIR\server\Apache2.2\bin\httpd.exe" -k install'; 启动服务

nsExec::ExecToLog'net start MySQL4.1'nsExec::ExecToLog'net start Apache2.2'SectionEnd

#=========================================================================================#=========================================================================================; 完成安装

Section"-PostInstall"; 输出卸载程序

WriteUninstaller"$INSTDIR\Uninstall.exe"; 写注册表

WriteRegStr HKCU"${REG_AppBase}""InstallDir""$INSTDIR"; 安装的目录

WriteRegStr HKCU"${REG_AppBase}""GroupName""$STR_GroupName"; 软件在开始菜单中的名称

WriteRegStr HKCU"${REG_AppBase}""Version""${STR_Version}"; 版本号

WriteRegStr HKCU"${REG_Uninstall}""DisplayName""$(^Name)"WriteRegStr HKCU"${REG_Uninstall}""UninstallString""$INSTDIR\Uninstall.exe"WriteRegStr HKCU"${REG_Uninstall}""DisplayIcon""$INSTDIR\EgOA.ico"WriteRegStr HKCU"${REG_Uninstall}""DisplayVersion""${STR_Version}"WriteRegStr HKCU"${REG_Uninstall}""URLInfoAbout""${STR_HomepageUrl}"WriteRegStr HKCU"${REG_Uninstall}""Publisher""${STR_Publisher}"SectionEnd

#=========================================================================================#=========================================================================================; 初始化回调函数

Function .onInit!insertmacro MUI_LANGDLL_DISPLAY

; 判断是否已安装

Var/GLOBAL OLD_REG_Version

ReadRegStr $OLD_REG_Version"HKCU""${REG_APPBASE}""Version"${If} $OLD_REG_Version<>''Abort'系统中已安装有本程序,请先卸载后再安装!'${EndIf}

FunctionEnd

#=========================================================================================#=========================================================================================# 替换文件中的字符串

Function AdvReplaceInFile

Exch $0;file to replaceinExch

Exch $1;number to replace after

Exch

Exch2Exch $2;replace and onwards

Exch2Exch3Exch $3;replace with

Exch3Exch4Exch $4;to replace

Exch4Push $5;minus count

Push $6;universal

Push $7;endstringPush $8;leftstringPush $9;rightstringPush $R0 ;file1

Push $R1 ;file2

Push $R2 ;read

Push $R3 ;universal

Push $R4 ;count (onwards)

Push $R5 ;count (after)

Push $R6 ;temp file name

GetTempFileName $R6

FileOpen $R1 $0r   ;file to searchinFileOpen $R0 $R6 w  ;temp file

StrLen $R3 $4StrCpy $R4-1StrCpy $R5-1loop_read:

ClearErrors

FileRead $R1 $R2 ;read line

IfErrors exit

StrCpy $50StrCpy $7$R2

loop_filter:

IntOp $5$5-1StrCpy $6$7$R3 $5;search

StrCmp $6""file_write2

StrCmp $6$40loop_filter

StrCpy $8$7$5;left part

IntOp $6$5+$R3

IntCmp $60is0 not0

is0:

StrCpy $9""Goto done

not0:

StrCpy $9$7""$6;right part

done:

StrCpy $7$8$3$9;re-join

IntOp $R4 $R4+1StrCmp $2all file_write1

StrCmp $R4 $20file_write2

IntOp $R4 $R4-1IntOp $R5 $R5+1StrCmp $1all file_write1

StrCmp $R5 $10file_write1

IntOp $R5 $R5-1Goto file_write2

file_write1:

FileWrite $R0 $7;write modified line

Goto loop_read

file_write2:

FileWrite $R0 $R2 ;write unmodified line

Goto loop_read

exit:

FileClose $R0

FileClose $R1

SetDetailsPrint none

Delete $0Rename $R6 $0Delete $R6

SetDetailsPrint both

Pop $R6

Pop $R5

Pop $R4

Pop $R3

Pop $R2

Pop $R1

Pop $R0

Pop $9Pop $8Pop $7Pop $6Pop $5Pop $0Pop $1Pop $2Pop $3Pop $4FunctionEnd

#=========================================================================================#=========================================================================================# 根据安装日志卸载文件的调用宏!macro DelFileByLog LogFile

ifFileExists `${LogFile}`0+4Push `${LogFile}`

Call un.DelFileByLog

Delete `${LogFile}`!macroend

#=========================================================================================#=========================================================================================; 卸载

Section"Uninstall"; 停止服务

nsExec::ExecToLog'net stop Apache2.2'nsExec::ExecToLog'net stop MySQL4.1'; 卸载服务

nsExec::ExecToLog'"$INSTDIR\server\MySQL4.1\bin\mysqld-nt.exe" --remove MySQL4.1'nsExec::ExecToLog'"$INSTDIR\server\Apache2.2\bin\httpd.exe" -k uninstall'; 从注册表中取得软件在开始菜单中的名称

ReadRegStr $TMP_GroupName HKCU"${REG_AppBase}""GroupName"; 删除开始菜单中的快捷方式与目录

Delete"$SMPROGRAMS\$TMP_GroupName\${STR_AppName}.url"Delete"$SMPROGRAMS\$TMP_GroupName\${STR_AppName} $(LNG_Help).url"Delete"$SMPROGRAMS\$TMP_GroupName\${STR_AppName} $(LNG_Homepage).url"Delete"$SMPROGRAMS\$TMP_GroupName\$(LNG_Uninstall) ${STR_AppName}.lnk"RMDir"$SMPROGRAMS\$TMP_GroupName"Delete/REBOOTOK"$DESKTOP\${STR_AppName}.url"; 删除桌面快捷方式

Delete/REBOOTOK"$QUICKLAUNCH\${STR_AppName}.url"; 删除快速启动快捷方式

; 调用宏根据安装日志卸载安装程序自己安装过的文件!insertmacro DelFileByLog"$INSTDIR\install.log"; 删除安装目录中的文件

RMDir"$INSTDIR"RMDir"$INSTDIR\help"RMDir"$INSTDIR\program"RMDir/r/REBOOTOK"$INSTDIR\server"RMDir/r/REBOOTOK"$INSTDIR\help"; 删除注册表内容

DeleteRegKey HKCU"${REG_Uninstall}"DeleteRegKey HKCU"${REG_AppBase}"SetAutoClose True

SectionEnd

#=========================================================================================#=========================================================================================; 卸载初始化

Function un.onInit!insertmacro MUI_UNGETLANGUAGE

FunctionEnd

#=========================================================================================#=========================================================================================# 卸载程序通过安装日志卸载文件函数

Function un.DelFileByLog

Exch $R0

Push $R1

Push $R2

Push $R3

FileOpen $R0 $R0 r

${Do}

FileRead $R0 $R1

${IfThen} $R1==`` ${|} ${ExitDo} ${|}

StrCpy $R1 $R1-2StrCpy $R2 $R111StrCpy $R3 $R120${If} $R2=="File: wrote"${OrIf} $R2=="File: skipp"${OrIf} $R3=="CreateShortCut: out:"${OrIf} $R3=="created uninstaller:"Push $R1

Push `"`Call un.DelFileByLog.StrLoc

Pop $R2

${If} $R2!=""IntOp $R2 $R2+1StrCpy $R3 $R1""$R2

Push $R3

Push `"`Call un.DelFileByLog.StrLoc

Pop $R2

${If} $R2!=""StrCpy $R3 $R3 $R2

Delete/REBOOTOK $R3

${EndIf}

${EndIf}

${EndIf}

StrCpy $R2 $R17${If} $R2=="Rename:"Push $R1

Push"->"Call un.DelFileByLog.StrLoc

Pop $R2

${If} $R2!=""IntOp $R2 $R2+2StrCpy $R3 $R1""$R2

Delete/REBOOTOK $R3

${EndIf}

${EndIf}

${Loop}

FileClose $R0

Pop $R3

Pop $R2

Pop $R1

Pop $R0

FunctionEnd

Function un.DelFileByLog.StrLoc

Exch $R0

Exch

Exch $R1

Push $R2

Push $R3

Push $R4

Push $R5

StrLen $R2 $R0

StrLen $R3 $R1

StrCpy $R40${Do}

StrCpy $R5 $R1 $R2 $R4

${If} $R5==$R0

${OrIf} $R4=$R3

${ExitDo}

${EndIf}

IntOp $R4 $R4+1${Loop}

${If} $R4=$R3

StrCpy $R0""${Else}

StrCpy $R0 $R4

${EndIf}

Pop $R5

Pop $R4

Pop $R3

Pop $R2

Pop $R1

Exch $R0

FunctionEnd

#=========================================================================================#=========================================================================================# 节描述!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN!insertmacro MUI_DESCRIPTION_TEXT ${SEC_ProgramFile}"$(LNG_ProgramFileDesc)"!insertmacro MUI_DESCRIPTION_TEXT ${SEC_EgOA}"$(LNG_EgOADesc)"!insertmacro MUI_DESCRIPTION_TEXT ${SEC_ServerEnv}"$(LNG_ServerEnvDesc)"!insertmacro MUI_DESCRIPTION_TEXT ${SEC_Shortcut}"$(LNG_CreateShortcutDesc)"!insertmacro MUI_DESCRIPTION_TEXT ${SEC_DesktopShortcut}"$(LNG_CreateShortcutDesc)"!insertmacro MUI_DESCRIPTION_TEXT ${SEC_QuickLaunchShortcut}"$(LNG_CreateShortcutDesc)"!insertmacro MUI_DESCRIPTION_TEXT ${SEC_AppNameShortcut}"$(LNG_CreateShortcutDesc)"!insertmacro MUI_DESCRIPTION_TEXT ${SEC_HelpShortcut}"$(LNG_CreateShortcutDesc)"!insertmacro MUI_DESCRIPTION_TEXT ${SEC_HomePageShortcut}"$(LNG_CreateShortcutDesc)"!insertmacro MUI_DESCRIPTION_TEXT ${SEC_UninstallShortcut}"$(LNG_CreateShortcutDesc)"!insertmacro MUI_FUNCTION_DESCRIPTION_END

#=========================================================================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值