nwjs項目打包exe程序

上一篇文章說到基於nsis製做exe程序,詳情請看php

本文主要會詳細介紹製做exe的完整步驟和流程,包括exe更名,換圖標等node

1. 環境搭建

安裝nsis-3.0-setup.exe,點擊下載web

安裝成功後,右鍵選擇nsi文件會顯示以下
clipboard.pngsql

2. workplus項目包準備(綠色版程序)

基於nwjs開發完成的整個項目包,包括node_modules, dll模塊等,以下shell

clipboard.png

2.1 exe名字修改

默認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

clipboard.png

如上圖所示,能夠看到依賴的是WorkPlus.exe函數

修改爲對應的依賴名,以下命令工具

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

clipboard.png

還須要對screenshot-binding.node用一樣的方式進行修改

完成上面修改後,直接把exe名字重命名成對應名字便可。

2.2 exe圖標修改

基於Resource Hacker這個工具,能夠直接修改exe的圖標

1. 把exe拖放到Resource Hacker工具裏面
2. 點擊Icon, 右鍵選中Replace icon, 須要提供ico格式的圖片,這個能夠經過在線工具轉換,如http://convertico.com/
3. 替換完保存便可,有時候exe的圖標還顯示舊的,能夠返回上一層再進入或者從新打開文件夾

clipboard.png

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進行測試

clipboard.png

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

基於nsis製做好的程序默認快捷方式和開始菜單入口的名字都是WorkPlus,如需修改可直接修改nsis腳本

具體請看nsis腳本,裏面有註釋

4 Change Log

2016.11.22

優化app在未退出的狀況下,用戶卸載或安裝寫文件失敗的問題

目前使用最粗暴的方式,檢測到WorkPlus.exe還在運行的話,直接彈框提示用戶,要求提出app後在進行相應的操做

基於nsis的第三方插件FindProcDLL實現檢測程序是否在運行,點擊下載插件
拷貝ANSI和Unicode目錄下的FindProcDLL.dll到nsis安裝目錄下的plugins對應的目錄裏

clipboard.png

在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

clipboard.png

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$\""

以下

clipboard.png

相關文章
相關標籤/搜索