杉宫竹苑工作室

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

使用NSIS打包B/S程序全部代码

[复制链接]
发表于 2016-9-2 20:03:44 | 显示全部楼层 |阅读模式

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

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

x
一直以来,B/S程序由于其结构的原因不能像安装WINDOWS程序那样使用setup来进行安装,一般都是由开发人员配置好WEB运行环境,再导入数据库(或者由WEB的安装程序完成此部分),这样一般来说够用了,再如果是不懂开发的人配置这些环境就麻烦了,如果能像安装WINDDOWS程序那样,一路回车法就能安装成功,那就更帅了。
前几天由于公司的项目需要,我小小的的研究了一下NSIS,为什么选它呢?因为它是使用脚本来定制安装程序的,非常灵活,就是要学习一下它的脚本语言,多看一些例子就会用了。
先说一下制作的原理,系统的环境是apache1.3, php5.1.4,mysql5。这几个其实都是不需要安装的,在window2000/xp下,直接配置成服务,并启动服务就行了。所以安装过程应该是分为
1.复制文件到指定目录.)
2.配置apache和mysql.
3.把apache和mysql安装成服务并启动.
首先下载并安装NSIS,安装后可以到它的example目录下看一下有很多例子程序。右键点示例脚本选择Compile NSIS Script进行编译,在该目录下会生成一个.exe文件,就是生成的安装程序文件。
NSIS的脚本由一些类似PHP和汇编的语法指定组成,还可以定义函数,宏。每个脚本至少有一个Section,名字为Uninstall的以un.开头的Section被认为是卸载时使用的指令集。
下面是安装程序的全部脚本。

  1. SetCompressor lzma
  2. !include "MUI.nsh"

  3. !define MUI_HEADERIMAGE
  4. !define MUI_HEADERIMAGE_BITMAP "E:\logo.bmp"
  5. !define MUI_ABORTWARNING
  6. !define APP_NAME "蓝桥OfficeSystem2.0"

  7. !insertmacro MUI_PAGE_WELCOME
  8. !insertmacro MUI_PAGE_DIRECTORY
  9. !insertmacro MUI_PAGE_INSTFILES
  10. !insertmacro MUI_PAGE_FINISH
  11. !insertmacro MUI_UNPAGE_WELCOME
  12. !insertmacro MUI_UNPAGE_CONFIRM
  13. !insertmacro MUI_UNPAGE_INSTFILES
  14. !insertmacro MUI_LANGUAGE "SimpChinese"

  15. Name ${APP_NAME}
  16. Icon "${NSISDIR}\Contrib\Graphics\Icons\arrow-install.ico"
  17. UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\arrow-uninstall.ico"
  18. DirText "安装程序将安装 $(^Name) 在下列文件夹。$\r$\n$\r$\n要安装在不同文件夹,单击 [浏览] 并选择其他文件夹。"
  19. InstallDir "C:\lqserver"
  20. OutFile "setup.exe"

  21. Section "setup"
  22. SetOutPath $INSTDIR
  23. File /r Apache
  24. File /r mysql5
  25. File /r officesystem2
  26. File /r php-5.1.4
  27. File /r config.js
  28. File /r sc.exe
  29. Call config
  30. WriteUninstaller "uninstall.exe"
  31. CreateDirectory "$INSTDIR\temp"
  32. CreateDirectory "$SMPROGRAMS\${APP_NAME}"
  33. CreateShortCut "$SMPROGRAMS\${APP_NAME}\启动${APP_NAME}.lnk" "http://localhost/"
  34. CreateShortCut "$SMPROGRAMS\${APP_NAME}\卸载${APP_NAME}.lnk" "$INSTDIR\uninstall.exe"
  35. SectionEnd

  36. Section "Uninstall"
  37. ExecWait "$INSTDIR\sc stop apache"
  38. ExecWait "$INSTDIR\Apache\apache -k uninstall"
  39. ExecWait "$INSTDIR\sc stop mysql"
  40. ExecWait "$INSTDIR\mysql5\bin\mysqld-nt --remove mysql"
  41. RMDir /r $INSTDIR
  42. RMDir /r "$SMPROGRAMS\${APP_NAME}"
  43. SectionEnd

  44. Function config
  45. ExecWait "cscript $INSTDIR\config.js $INSTDIR"
  46. #先停止并禁用IIS服务
  47. ExecWait "$INSTDIR\sc stop w3svc"
  48. ExecWait "$INSTDIR\sc config w3svc start= disabled"
  49. #安装apache和mysql服务
  50. ExecWait "$INSTDIR\Apache\apache -k install"
  51. ExecWait "$INSTDIR\sc start apache"
  52. ExecWait "$INSTDIR\mysql5\bin\mysqld-nt --install mysql --defaults-file=$INSTDIR\mysql5\my.ini"
  53. ExecWait "$INSTDIR\sc start mysql"
  54. FunctionEnd
复制代码


一些指定的解释
SetCompressor lzma 指定压缩方式) r0 ^: B3 ?2 T( K8 |& K, {
!define APP_NAME "蓝桥OfficeSystem2.0" 定义应用程序的名字以便后面使用。
!insertmacro MUI_PAGE_*
这些是安装程序的所有页面,包括欢迎界面,选择目录,安装文件,完成页面。2 }# R! o( e, _# q: I   x
, n. H   L0 J8 I
Name ${APP_NAME} 指定应用程序的名字,语法和PHP有些类似
Icon "${NSISDIR}\Contrib\Graphics\Icons\arrow-install.ico"
UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\arrow-uninstall.ico"! B+ g# `/ B5 G" z7 m+ k$ t
指定安装程序和卸载程序的图标,$NSISDIR是NSIS的安装目录,不用修改。3 _0 h1 y2 D. v" h. y3 E9 y
InstallDir "C:\lqserver" 默认安装目录
OutFile "setup.exe" 输出的安装程序文件名称" Z! k/ i   q: B   e2 T   t
下面的一个section就是主要的安装和配置指令& d9 m9 g$ f; z% j% p$ x
File /r 解压一个文件夹及下面所有的文件和子目录到安装位置4 K- f- G" @- W+ P
Call config 调用config函数,这个函数主要是修改配置文件的作用。
WriteUninstaller "uninstall.exe" 生成卸载程序$ {9 W- h   B$ `5 X0 J- ^& g7 {; I
ExecWait 是执行程序并等待返回,这样可以防止外部程序的运行而影响到NSIS脚本的执行。比如在apache服务的停止的时候,如果服务没停止完,就进行删除文件的操作就会出错。
在修改apache和mysql配置文件的时候我采用了js脚本来完成。因为用NSIS来完成这个功能太吃力了,用JS脚本进行字符串替换还是比较简单的,主要是把一些目录修改为安装目录就可以了。
还有这里使用了sc.exe,这个程序是命令行下管理windows服务的程序,不是系统自带的,可以去microsoft下载,使用它先禁用iis服务,防止和apache发生冲突。另外使用sc启动和停止服务要比用net命令快的多。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 16:48 , Processed in 0.120695 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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