NSIS脚本开发总结
最近在做NSIS腳本安裝程序開(kāi)發(fā),在此做一些開(kāi)發(fā)上的總結(jié),記錄一下遇到的技術(shù)難題。
首先是環(huán)境配置,這個(gè)很簡(jiǎn)單只要把nsis和nisedit下載安裝就能做基本的開(kāi)發(fā)了。?下載鏈接NSIS: Nullsoft Scriptable Install System - Browse Files at SourceForge.net
安裝之后打開(kāi)nisedit點(diǎn)擊文件-->新建腳本:向?qū)?chuàng)建一個(gè)nsi后綴文件的模板出來(lái)。可以在模板中調(diào)整代碼適配自己的開(kāi)發(fā)需求。需要注意的是創(chuàng)建模板時(shí)如果用到了授權(quán)文件和自述文件,需要自己創(chuàng)建,找不到這兩個(gè)文件會(huì)創(chuàng)建失敗。
如果想要在打印日志的話就需要下載對(duì)應(yīng)版本的log壓縮包,將解壓出來(lái)的文件去nsis安裝路徑下替換就可以了。不過(guò)這個(gè)日志文件名和日志內(nèi)容是不可控的,如果想要隨心所欲的打印日志有兩種方式。一是去研究源碼自行修改,時(shí)間成本較高。本人采用了創(chuàng)建文件,寫(xiě)入日志內(nèi)容的方式。打印日志接口封裝及使用如下:
需要注意的是根據(jù)封裝邏輯!insertmacro InsLogPrint "install init"這行代碼在程序中被檢測(cè)到占用兩行。?
?程序單例運(yùn)行通常采用創(chuàng)建互斥鎖的方式:System::Call 'kernel32::CreateMutexA(i 0, i 0, t "INSClient") i .r1 ?e' 此種方式會(huì)在系統(tǒng)tmp文件夾下創(chuàng)建一個(gè)隨機(jī)的文件夾,在此隨機(jī)文件夾里產(chǎn)生一個(gè)System.dll文件,此機(jī)制如果影響到軟件運(yùn)行,請(qǐng)慎用。同樣的nsExec::Exec 'cmd /c "taskkill /f /t /im winmd5.exe"'操作會(huì)產(chǎn)生nsExec.dll臨時(shí)文件;FindProcDLL::FindProc "${PRODUCT_VERSION}.exe"操作會(huì)產(chǎn)生FindProcDLL.dll臨時(shí)文件,同時(shí)使用此種方式需要下載對(duì)應(yīng)的dll文件。dll文件不對(duì)該操作不會(huì)生效。為防止對(duì)進(jìn)程操作時(shí)產(chǎn)生臨時(shí)文件可以使用ExecShellWait接口,具體操作參考文檔。
對(duì)系統(tǒng)驅(qū)動(dòng)文件操作時(shí)需要在${DisableX64FSRedirection},${EnableX64FSRedirection}兩行代碼之間執(zhí)行。
程序的重啟提示是默認(rèn)關(guān)閉的。但是在文件進(jìn)行刪除操作時(shí)使用了/REBOOTOK屬性,如果文件沒(méi)有刪除成功會(huì)自動(dòng)開(kāi)始重啟提示。程序執(zhí)行完畢在節(jié)面上會(huì)出現(xiàn)是否立即重啟選項(xiàng)。可以通過(guò)SetRebootFlag false操作關(guān)閉提示。系統(tǒng)重啟后仍會(huì)自動(dòng)刪除。
?安裝包在釋放程序的過(guò)程中可以設(shè)置SetOverwrite on,文件將被覆蓋,如果文件釋放失敗會(huì)進(jìn)行提示。此外還有try、off等選項(xiàng)。
暫時(shí)先總結(jié)這么多,都是干貨。nsis做打包程序開(kāi)發(fā)很合適,不過(guò)想要像c++一樣開(kāi)發(fā)限制也很多。接下來(lái)準(zhǔn)備寫(xiě)一篇用批處理去編譯nsi程序生成安裝包文件的操作
總結(jié)
以上是生活随笔為你收集整理的NSIS脚本开发总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机专业英语词汇总结
- 下一篇: installshield脚本入门