上一篇文章说到基于nsis制作exe程序,详情请看
本文主要会详细介绍制作exe的完整步骤和流程,包括exe改名,换图标等
1. 环境搭建
安装nsis-3.0-setup.exe,点击下载
安装成功后,右键选择nsi文件会显示如下
2. workplus项目包准备(绿色版程序)
基于nwjs开发完成的整个项目包,包括node_modules, dll模块等,如下
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
如上图所示,可以看到依赖的是WorkPlus.exe
修改成对应的依赖名,如下命令
rid.exe node_modules\sqlite3\lib\binding\node-webkit-v0.12.3-win32-ia32\node_sqlite3.node WorkPlus.exe iWork.exe
还需要对screenshot-binding.node用同样的方式进行修改
完成上面修改后,直接把exe名字重命名成对应名字即可。
2.2 exe图标修改
基于Resource Hacker这个工具,可以直接修改exe的图标
1. 把exe拖放到Resource Hacker工具里面
2. 点击Icon, 右键选中Replace icon, 需要提供ico格式的图片,这个可以通过在线工具转换,如http://convertico.com/
3. 替换完保存即可,有时候exe的图标还显示旧的,可以返回上一层再进入或者重新打开文件夹
2.3 角标托盘图标修改
替换如下四个图片即可,图片包括两种状态有无新消息
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进行测试
3.1 桌面快捷方式,开始菜单等入口重命名
基于nsis制作好的程序默认快捷方式和开始菜单入口的名字都是WorkPlus,如需修改可直接修改nsis脚本
具体请看nsis脚本,里面有注释
4 Change Log
2016.11.22
优化app在未退出的情况下,用户卸载或安装写文件失败的问题
目前使用最粗暴的方式,检测到WorkPlus.exe还在运行的话,直接弹框提示用户,要求提出app后在进行相应的操作
基于nsis的第三方插件FindProcDLL实现检测程序是否在运行,点击下载插件
拷贝ANSI和Unicode目录下的FindProcDLL.dll到nsis安装目录下的plugins对应的目录里
在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
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$\""
如下
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。