突然發現NSIS的 主程序有些東西實現起來比較麻煩 找了一些資料 研究研究幾個插件 看看 什么玩法套路
一、nsisXML
nsisXML::create 不管是讀還是寫都要有
nsisXML::load 然后一般讀取配置文件是 這個后面就直接寫路徑就行 nsisXML::load ‘$INSTDIR\Dir\test.xml’
這個地方要加一個返回判斷 IntCmp $0 0 notFoundXml 這個會自動壓入$0 如果找不到 還繼續select 安裝程序就卡死了 所以在下面寫個跳轉的標記notFoundXml
nsisXML::select 找到你想修改的標簽內容 例如 nsisXML::select '/test/common'
nsisXML::setText 存儲內容 nsisXML::setText '"$INSTDIR\Dir\test.exe"'
nsisXML::save 記得保存 nsisXML::save ‘$INSTDIR\Dir\test.xml’
https://nsis.sourceforge.io/NsisXML_plug-in_(by_Wizou) 這里面是官方的文檔 詳細的返回值 看一下官方文檔
二、nsExec
nsExec::Exec 直接批處理命令而不打開 DOS框
用法:
nsExec::Exec ‘schtasks /create /tn "PrettyBoy" /tr "$INSTDIR\dir\PretyBoy.exe /sc ONSTART /rl HIGHEST’
后面的一大堆 意思是
用批處理創建的計划任務任務名字叫PrettyBoy
執行的文件是 .exe那個
/sc ONSTART是馬上執行
/rl HIGHEST是最高權限
這段起始不用單獨記因為你不一定用到 記住用法就行
nsExec::ExecToLog 這個是打印日志的意思 你可以執行到DOS里面看一下
用法:
nsExec::ExecToLog 'cmd.exe /c "$INSTDIR\dir\PrettyBoy.exe" install'
三、SimpleSC
SimpleSC :: ExistsService 安裝服務的插件
用法
SimpleSC :: ExistsService “PrettyBoy”
如果該服務存在,則SimpleSC :: ExistsService現在的結果為0,如果該服務不存在,則結果為<> 0
安裝完可以判斷一下服務安裝是否成功 成功了才能啟動
Pop $0
IntCmp $0 0 yes no
SimpleSC::StartService 啟動服務的用法跟上面一樣
SimpleSC::StartService “PrettyBoy”
就是啟動該服務
四、nsProcess
這個主要是對進程操作用的
nsProcess::_FindProcess 首先殺進程 先得找到該進程
用法:
nsProcess::_FindProcess "Pretty.exe"
pop $0
IntCmp $0 603 findit notfind
返回值如果沒有匹配到進程返回的是603 匹配到進程則是0 下面的操作自行解決
nsProcess::_Unload 就是關閉該進程 這個跟上面那個可以一起用 有沒有進程都可以關一下
補充一下 這個插件在Unicode編碼格式下會報錯 記得把插件里的nsProcessW 改成nsProcess就可以了 這樣就能通過編譯了 主要針對 繁體中文系統的亂碼問題
五、ExecCmd
ExecCmd::exec 這個就直接后面執行dos命令即可 不過已經不在更新了 最新的插件是ExecDos 大家可以區研究研究
用法:
ExecCmd::exec "taskkill /F /IM Pretty.exe /T"
這個就是殺掉所有相關進程了