nwjs项目打包exe程序

上一篇文章说到基于nsis制作exe程序,详情请看

本文主要会详细介绍制作exe的完整步骤和流程,包括exe改名,换图标等

1. 环境搭建

安装nsis-3.0-setup.exe,点击下载

安装成功后,右键选择nsi文件会显示如下
clipboard.png

2. workplus项目包准备(绿色版程序)

基于nwjs开发完成的整个项目包,包括node_modules, dll模块等,如下

nwjs项目打包exe程序_第1张图片

2.1 exe名字修改

默认exe的名字使用产品名称WorkPlus, 如果要对其修改不是简单的右键重命名,因为项目中有用到sqlite3,而sqlite3的node模块在经过nw-gyp编译后生产的node_sqlite3.node依赖了nwjs默认的nwjs.exe这个名字,这样就会导致只有nwjs.exe能加载node_sqlite3.node

准备工具rid.exe, 点击下载

把rid.exe拷贝的workplus目录下,打开命令行工具,进入rid.exe所在的目录,执行命令

rid.exe node_modules\sqlite3\lib\binding\node-webkit-v0.12.3-win32-ia32\node_sqlite3.node

nwjs项目打包exe程序_第2张图片

如上图所示,可以看到依赖的是WorkPlus.exe

修改成对应的依赖名,如下命令

rid.exe node_modules\sqlite3\lib\binding\node-webkit-v0.12.3-win32-ia32\node_sqlite3.node WorkPlus.exe iWork.exe

nwjs项目打包exe程序_第3张图片

还需要对screenshot-binding.node用同样的方式进行修改

完成上面修改后,直接把exe名字重命名成对应名字即可。

2.2 exe图标修改

基于Resource Hacker这个工具,可以直接修改exe的图标

1. 把exe拖放到Resource Hacker工具里面
2. 点击Icon, 右键选中Replace icon, 需要提供ico格式的图片,这个可以通过在线工具转换,如http://convertico.com/
3. 替换完保存即可,有时候exe的图标还显示旧的,可以返回上一层再进入或者重新打开文件夹

nwjs项目打包exe程序_第4张图片

2.3 角标托盘图标修改

替换如下四个图片即可,图片包括两种状态有无新消息

clipboard.png

2.4 api地址修改

在workplus目录下进入app/scripts/constants, 修改constant.js

SERVER_URL: API地址,必须以/结尾
MEDIA_SERVER_URL: 媒体API地址,必须以/结尾
MEDIA_SERVER_URL_IS_HTTPS: 是否HTTPS
SERVE_NO_ADMIN_BASE_URL: 服务号跳转地址,即管理后台地址,如http://workplus.yuexiu.com:8001/workplus

3. nsis脚本

第二步中要修改的都完成后,就进入打包制作流程
nsis脚本下载, 点击下载

把nsis脚本和workplus目录放在同一层级,右键nsis脚本,点击Compile NSIS Script

构建成功后会生成workplus-setup.exe,可以点击界面上Test Installer进行测试

nwjs项目打包exe程序_第5张图片

3.1 桌面快捷方式,开始菜单等入口重命名

基于nsis制作好的程序默认快捷方式和开始菜单入口的名字都是WorkPlus,如需修改可直接修改nsis脚本

具体请看nsis脚本,里面有注释

4 Change Log

2016.11.22

优化app在未退出的情况下,用户卸载或安装写文件失败的问题

目前使用最粗暴的方式,检测到WorkPlus.exe还在运行的话,直接弹框提示用户,要求提出app后在进行相应的操作

基于nsis的第三方插件FindProcDLL实现检测程序是否在运行,点击下载插件
拷贝ANSI和Unicode目录下的FindProcDLL.dll到nsis安装目录下的plugins对应的目录里

nwjs项目打包exe程序_第6张图片

在workplus-setup.nsi脚本文件最后面添加如下代码

;开始安装时检查是否正在运行
Function .onInit

  FindProcDLL::FindProc "WorkPlus.exe"
  Pop $R0
  IntCmp $R0 1 0 no_run
  MessageBox MB_ICONINFORMATION "安装程序检测到 WorkPlus 正在运行,请退出程序后重试"
  Quit
  no_run:
   
FunctionEnd

;开始卸载时检查:
Function un.onInit
  FindProcDLL::FindProc "WorkPlus.exe"
  Pop $R0
  IntCmp $R0 1 0 no_run
  MessageBox MB_ICONINFORMATION "卸载程序检测到 WorkPlus 正在运行,请退出程序后重试"
  Quit
  no_run:
FunctionEnd

nwjs项目打包exe程序_第7张图片

2016.12.12

实现网页调起客户端程序,打开聊天会话

将下面脚本合并到onInit函数里

  Var /GLOBAL protocol
  StrCpy $protocol "workplus"

  Var /GLOBAL app
  StrCpy $app "$INSTDIR\workplus\WorkPlus.exe" 

  SetRegView 64
  WriteRegStr HKCR "$protocol" "" "URL:$protocol Protocol"
  WriteRegStr HKCR "$protocol" "URL Protocol" ""
  WriteRegStr HKCR "$protocol\shell\open\command" "" "$\"$app$\" $\"%1$\""
  
  SetRegView 32
  WriteRegStr HKCR "$protocol" "" "URL:$protocol Protocol"
  WriteRegStr HKCR "$protocol" "URL Protocol" ""
  WriteRegStr HKCR "$protocol\shell\open\command" "" "$\"$app$\" $\"%1$\""

如下

nwjs项目打包exe程序_第8张图片

你可能感兴趣的:(nwjs,打包,exe程序,nsis)