上一篇文章說到基於nsis製做exe程序,詳情請看php
本文主要會詳細介紹製做exe的完整步驟和流程,包括exe更名,換圖標等node
安裝nsis-3.0-setup.exe,點擊下載web
安裝成功後,右鍵選擇nsi文件會顯示以下
sql
基於nwjs開發完成的整個項目包,包括node_modules, dll模塊等,以下shell
默認exe的名字使用產品名稱WorkPlus, 若是要對其修改不是簡單的右鍵重命名,由於項目中有用到sqlite3,而sqlite3的node模塊在通過nw-gyp編譯後生產的node_sqlite3.node依賴了nwjs默認的nwjs.exe這個名字,這樣就會致使只有nwjs.exe能加載node_sqlite3.nodesegmentfault
準備工具rid.exe, 點擊下載api
把rid.exe拷貝的workplus目錄下,打開命令行工具,進入rid.exe所在的目錄,執行命令app
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名字重命名成對應名字便可。
基於Resource Hacker這個工具,能夠直接修改exe的圖標
1. 把exe拖放到Resource Hacker工具裏面 2. 點擊Icon, 右鍵選中Replace icon, 須要提供ico格式的圖片,這個能夠經過在線工具轉換,如http://convertico.com/ 3. 替換完保存便可,有時候exe的圖標還顯示舊的,能夠返回上一層再進入或者從新打開文件夾
替換以下四個圖片便可,圖片包括兩種狀態有無新消息
在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
第二步中要修改的都完成後,就進入打包製做流程
nsis腳本下載, 點擊下載
把nsis腳本和workplus目錄放在同一層級,右鍵nsis腳本,點擊Compile NSIS Script
構建成功後會生成workplus-setup.exe,能夠點擊界面上Test Installer進行測試
基於nsis製做好的程序默認快捷方式和開始菜單入口的名字都是WorkPlus,如需修改可直接修改nsis腳本
具體請看nsis腳本,裏面有註釋
優化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
實現網頁調起客戶端程序,打開聊天會話
將下面腳本合併到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$\""
以下