NSIS 常用小問題合集 論壇收集

2022-03-31 22:48:48 字數 1955 閱讀 7769

程式**

問: nsis裡那種演算法打包出來的檔案更小?

答: lzma(固實) 相當於 7z 建立固實壓縮檔案。如果用 setcompressordictsize 把字典調大(不過同時也減慢了速度,占用更大記憶體),應該可以把壓縮調到極限壓縮等級。7z 的極限壓縮預設字典為 32 mb

setcompressor /solid lzma

setcompressordictsize 32

程式**

1.問: 為什麼nsis 中的變數可以裝 數值,也可以裝 字串。

答:nsis 是一種弱性語言,變數全部都是字串,如果是整數運算的話在內不會自動把字元轉換成整數變數。也就是說內部會執行類似於 atoi 的運算。

2.問: .oninstsuccess是當安裝成功且正當安裝視窗關閉前呼叫,有沒有當「安裝成功」且正當安裝視窗關閉後呼叫的**函式呢?若沒有,那麼有沒有辦法在安裝成功且正當安裝視窗關閉前將頁面隱藏(因為我此時使用了乙個messagebox,想在message彈出時將 完成頁面 隱藏。現在的情況是,message彈出,完成頁面還在背後,真難看)?

答: 以下指令碼實現

function .oninstsuccess

hidewindow

messagebox mb_iconinformation|mb_ok "$(^name) 已成功地安裝到你的計算機。"

functionend

程式**

問: 關於把焦點定位到指定控制項的方法。

答: 在這裡假設為乙個控制項為文字控制項,id 為 1200,第二個為編輯框控制項,id 為 1201,那麼預設的時候編輯框裡的文字是選中的。

1. 把焦點轉移到第乙個控制項上面

function pageset

installoptions::initdialog /nounload $pluginsdir\io.ini

pop $0

getdlgitem $1 $0 1200

system::call 'user32::setfocus(i r1) i'

installoptions::show

pop $0

functionend

2. 取消編輯框的文字選擇

function pageset

installoptions::initdialog /nounload $pluginsdir\io.ini

pop $0

getdlgitem $1 $0 1200

sendmessage $1 $ -1 0

installoptions::show

pop $0

functionend

3. 把焦點設到下一步按鈕上面算了,下一步的控制項 id 是 1

!define mui_page_customfunction_show pageshow

!insertmacro mui_page_directory

function pageshow

findwindow $0 "#32770" "" $hwndparent

getdlgitem $1 $0 1

system::call 'user32::setfocus(i r1) i'

functionend

以上的**中用到的控制項 id 可用 reshacker 獲取。

程式**

問: 因為要安裝的程式不能安裝到包含空格的路徑中,否則程式不能正常執行.請問在nsis中有沒有辦法判斷$instdir中有空格?

答: 基本上這類問題可以簡單化為是否符合 dos 的 8.3 命名規則,就可以避免很多這類問題的發生。用 getfullpathname 來獲取短路徑名。然後得到的字串跟原來的路徑字串相比較,如果不相等,就是不符合 8.3 的規則,所以才會轉出短路徑。

程式**

問: 如果我把安裝程式刻到光碟,安裝時自動得到光碟機碟符附給乙個變數該怎麼編寫?

答: strcpy $0 $exedir 3

NSIS 常用技術要點

nsis複製檔案,不彈出任何視窗 n ec exectolog cmd.exe c copy instdir php5 php.ini windir y n ec exectolog cmd.exe c copy instdir php5 php5ts.dll sysdir y nsis註冊服務,啟...

NSIS 常用技術要點

nsis複製檔案,不彈出任何視窗 n ec exectolog cmd.exe c copy instdir php5 php.ini windir y n ec exectolog cmd.exe c copy instdir php5 php5ts.dll sysdir y nsis註冊服務,啟...

NSIS常用 指令解釋

nsis 路徑 安裝目錄 instdir 可以使用 strcpy readregstr readinistr 等等來更改。例如在 oninit 函式裡可以用來做高階的檢測安裝定位 注意在解除安裝程式 裡,instdir 為解除安裝程式所在的目錄而不是在安裝程式裡所指定的目錄。例如,你把解除安裝程式放...