electron-builder打包,NSIS的一些使用總結(jié)

本文首發(fā)于公眾號【一個老碼農(nóng)】

NSISWindows系統(tǒng)下專門用來制作安裝程序的,可以讓我們自定義一些.exe文件安裝過程中的一些操作。市面上的桌面開發(fā)技術(shù)基本都可以使用NSIS,如qt、mfc、electron。

NSIS配置項

electron中用electron-builder打包時,我們可以對package.json文件中的nsis對象進(jìn)行配置,以達(dá)到我們對安裝程序一定程度上的設(shè)置。如:

oneClick:值為布爾類型,true時代表一鍵安裝,false代表一步步安裝

perMachine:值為布爾類型,代表是否顯示輔助安裝程序的安裝模式安裝程序頁面(選擇按機(jī)器還是按用戶)。true時代表始終按用戶安裝。

allowToChangeInstallationDirectory:值為布爾類型,是否允許用戶修改安裝目錄,true為允許,false為不允許

displayLanguageSelector:布爾類型,是否允許選擇語言(默認(rèn)為系統(tǒng)語言),true為允許,false為不允許

language:字符串類型,默認(rèn)語言

guid:字符串類型,為應(yīng)用軟件指定guid,此guid會存放在注冊表中,如果沒有指定則系統(tǒng)會自動生成

createDesktopShortcut:布爾類型或"always",是否創(chuàng)建桌面快捷方式,true時表示創(chuàng)建,false表示不創(chuàng)建,"always"代表重新安裝時也創(chuàng)建

include:字符串類型,NSIS包含定制安裝程序腳本的路徑

上面只列舉一部分字段進(jìn)行說明,有需要可參考下面網(wǎng)站:
https://www.electron.build/generated/nsisoptions

NSIS腳本

以上nsis的配置項很強(qiáng)大,但是它并不能滿足我們所有的需求,這個時候就需要我們自己寫NSIS腳本,并設(shè)置NSIS配置項的include字段,如下:

"include": "./build/installer.nsh"

下面我講一下我工作中用NSIS腳本實現(xiàn)的一個功能:向自定義的安裝路徑后面追加文件夾

用戶在點擊exe文件安裝時,一般情況下是可以自由修改安裝目錄的,如果用戶隨意選擇一個目錄,可能就會導(dǎo)致安裝后的文件比較亂,不利于查找和維護(hù)。如:用戶選擇了D盤根路徑,或者選擇了桌面為安裝目錄,那么安裝后的文件,就會全部放在根路徑下或者桌面。

這個問題就可以通過NSIS腳本的方式來解決,當(dāng)用戶通過瀏覽按鈕修改安裝路徑后,我們會檢測其路徑的最后一個文件夾是否為myApp,如果不是則在后面追加一個文件夾myApp。
如用戶選擇的是D盤根路徑 D:\ ,那么追加后的路徑就為D:\myApp\

具體做法分為兩部,如下:

1.創(chuàng)建一個NSIS腳本文件installer.nsh,并設(shè)置package.json中的nsis配置。

"nsis": {
    "oneClick": false,
    "perMachine": true,
    "allowToChangeInstallationDirectory": true,
    "include": "installer.nsh"
}

2.在installer.nsh文件中編寫腳本,腳本代碼如下:

!define DIR_NAME "myApp"

Function .onVerifyInstDir
  StrLen $0 "\${DIR_NAME}"
  StrCpy $1 "$INSTDIR" "" -$0
  StrCmp $1 "\${DIR_NAME}" +2 0
  StrCpy $INSTDIR "$INSTDIR\${DIR_NAME}"
FunctionEnd

我們一句一句對以上代碼來進(jìn)行解釋

!define DIR_NAME "myApp"代表定義一個DIR_NAME的宏常量,即我們將要追加的文件夾名稱。

Function .onVerifyInstDir
其中Function代表一個方法,.onVerifyInstDir是NSIS為我們提供的一個回調(diào)方法,用戶通過瀏覽修改安裝目錄后就會調(diào)用。

StrLen $0 "\${DIR_NAME}"表示計算\myApp的字符串長度,并賦值給$0。

StrCpy $1 "$INSTDIR" "" -$0
表示把用戶修改后的安裝路徑,從后往前截取0的長度。并賦值給1。
其中$INSTDIR為用戶修改后的安裝路徑。

StrCmp $1 "\${DIR_NAME}" +2 0
表示比對$1變量與是否等于\myApp,如果相等,則繼續(xù)往下執(zhí)行,否則往后跳兩行執(zhí)行

StrCpy $INSTDIR "$INSTDIR\${DIR_NAME}"
表示在用戶修改后的路徑后再拼接一個\myApp,即拼接一個myApp文件夾。

FunctionEnd 代表此回調(diào)方法結(jié)束

當(dāng)然NSIS腳本還可以做很多事情,例如修改默認(rèn)安裝路徑、修改注冊表、根據(jù)操作進(jìn)行彈框提示等等。對于NSIS我也是一個初學(xué)者,關(guān)于NSIS腳本寫法,可參考官方文檔:
https://nsis.sourceforge.io/Docs/

關(guān)注公眾號【一個老碼農(nóng)】,更多優(yōu)質(zhì)技術(shù)內(nèi)容等你來
原文地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容