程式**
問: 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 為解除安裝程式所在的目錄而不是在安裝程式裡所指定的目錄。例如,你把解除安裝程式放...