標籤:
轉自: http://www.flighty.cn/html/bushu/20140526_232.html 在微軟SQL2000+SP4整合安裝版安裝包中可以根據目標作業系統自動勾選對應的版本,有同學問我這個功能是如何?的,今天輕狂寫一個短文統一回複一下。 重點就是使用了SectionSetFlags指令,以下是NSIS 使用者手冊中的說明: 設定區段標記。標記為 32 位整數。第一位(低位)代表該區段當前是否選中,第二位代表該區段是否是一個區段組 (請不要修改這裡除非你真的很瞭解), 第三位代表該區段是否是一個區段組的結尾 (同樣,請不要修改),第四位代表該區段文字是否描黑顯示,第五位代表該區段是否是唯讀,第六位代表區段組是否自動延伸,第七位代表區段組是部分選定的,第八位是部分選定區段組切換內部使用,第九位是用來反映區段名稱更改。如果指定了超出範圍的區段則會放置一個錯誤的標記。每個標記名稱都以 `SF_` 開頭: !define SF_SELECTED 1!define SF_SECGRP 2!define SF_SECGRPEND 4!define SF_BOLD 8!define SF_RO 16!define SF_EXPAND 32!define SF_PSELECTED 64 我們只用第一位即可。 下面是完整指令碼:
;少輕狂www.nsisfans.comName "根據不同環境自動勾選特定區段"OutFile "根據不同環境自動勾選特定區段.exe"!include "MUI2.nsh"!include "WinVer.nsh"!insertmacro MUI_PAGE_COMPONENTS!insertmacro MUI_PAGE_INSTFILES!insertmacro MUI_LANGUAGE "SimpChinese"InstallDir "$TEMP"Section /o "SQL2000開發版" SEC01 SectionIn RO MessageBox MB_OK|MB_ICONEXCLAMATION ‘開發版!‘SectionEndSection /o "SQL2000企業版" SEC02 SectionIn RO MessageBox MB_OK|MB_ICONEXCLAMATION ‘企業版!‘SectionEndFunction .onInit${If} ${IsServerOS} SectionGetFlags ${SEC02} $R0 IntOp $0 $R0 | ${SF_SELECTED} SectionSetFlags ${SEC02} $0${Else} SectionGetFlags ${SEC01} $R0 IntOp $0 $R0 | ${SF_SELECTED} SectionSetFlags ${SEC01} $0${EndIf}FunctionEnd
另:在onInit當然不局限於判斷作業系統,而是可以根據指定的特徵,比如判斷註冊表索引值或者某檔案是否存在等。輕狂在這裡只是提一個思路,具體就看大家怎麼發揮了。
輕狂志(少輕狂)原創文章,轉載請註明作者和出處,謝謝!http://www.flighty.cn/html/bushu/20140526_232.html
[轉]NSIS:使用SectionSetFlags根據不同環境自動勾選特定區段