<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Picses' sky

    Picses' sky
    posts - 43, comments - 29, trackbacks - 0, articles - 24

    全方位掌握 NSIS 的使用

    Posted on 2008-01-30 11:48 Matthew Chen 閱讀(742) 評論(0)  編輯  收藏 所屬分類: Softwares Configurations
    NSIS 確實是一個不錯的安裝程序制作軟件。新版本 2.0a7 真正實現(xiàn)了中文支持和支持 WinXP 的安裝對話框。不過要用它實現(xiàn)漂亮的安裝界面和完美的安裝功能就必須好好的寫腳本。而 NSIS 的腳本指令是在是太多了,有時候覺得好像又回到了學習 C 語言的年代。他豐富而起強大的功能甚至可以編譯出一些小而使用的軟件(例如查找窗口句柄,然后...)好了,不多說。我在這里著重介紹關(guān)于 NSIS 的一些使用問題以及新界面安裝程序的制作過程,中間會附上一個示例腳本。

    這里只說單語言的簡體中文

    1. NSIS的運行問題
    2.0a7 的 NSIS 安裝在長文件名的目錄中好像會有問題(Win2k 和 WinXP 下,Win98 下好像沒問題)。你若是將NSIS 安裝在類似于“E:\System\Installer\NSIS 的目錄中”(其中的“Installer”是超過了 8 個字符的長文件名),運行 makensisw 或是直接在命令提示符中使用 makensis 可能會非法操作。
    解決的辦法是:在命令提示符下使用如下指令:

    cd E:\System\Instal~1\NSIS
    進入 NSIS 安裝目錄后使用命令行:

    makensis /CD /X"Compressor bzip2" "f:\1.nsi"

    你可以在腳本文件中使用了“SetCompressor bzip2”指令,這樣就可以去掉“/X"Compressor bzip2"”參數(shù)。使用 makensisw 的朋友我就不多說了,你可以從我上面的分析中得到點啟發(fā)。自己設(shè)置一下它的運行參數(shù)吧!不過 makensisw 也有 Bug,若用 makensisw 編譯時發(fā)現(xiàn)腳本錯誤,程序就立馬非法操作。

    2. 關(guān)于腳本的整體布局
    說 NSIS 有些象高級語言的語法一點沒錯。NSIS 的語法非常注重先后順序(我曾經(jīng)為了一個指令的先后順序來回 Ctrl+C & Ctrl+V 了 N 次)。例如象它的幫助文件中提到的“SetFont”指令必須在“AddBrandingImage”指令之前等。我在這里要說的而是關(guān)于如何正確的對腳本進行整體布局,使其能更加合理、高效的被使用,這樣才有利于日后的安裝程序更新

    你可以用我后面的示例腳本為模板制作自己的 NSIS 腳本。

    大體布局如下:

    //////////////////////////////////////////////////////////////

    預(yù)設(shè)參數(shù)(包括外部壓縮器選擇、編譯選項、宏定義以及文件包含等)

    普通安裝設(shè)置

    自定義函數(shù)

    安裝程序區(qū)域內(nèi)容

    安裝程序回調(diào)函數(shù)及其相關(guān)函數(shù)定義

    卸載程序區(qū)域內(nèi)容

    卸載程序回調(diào)函數(shù)及其相關(guān)函數(shù)定義

    //////////////////////////////////////////////////////////////

    3. 關(guān)于安裝程序 Logo 畫面的說明:
    先前版本的 NSIS 使用 splash.exe 制作 logo畫面,但若您使用 2.0a7,
    我建議您使用(好像也只能使用)magiclime.exe,它在 Win2k 和 WinXP
    下顯示 logo畫面時會有淡入淡出的效果。超 Cool....

    4. 關(guān)于標牌位圖(即顯示在安裝程序?qū)υ捒蛑械淖远x位圖)的說明:
    2.0a7 提供了宏指令用于在安裝程序的對話框中顯示標牌位圖。當然你也可以用標準的 NSIS 指令。

    5. 關(guān)于使用新的 Modern UI 界面的說明:
    2.0a7 同樣提供了宏指令使你可以使用全新的安裝界面:
    首先你需要安裝 NSIS v2.0a7 簡體中文補丁(漢化新世紀有下載):
    然后打開安裝目錄下的 Examples\Modern UI\ModernUI.nsh 文件,將從
    !macro MUI_INTERFACE UI ICON UNICON CHECKS PROGRESSBAR
    到第一個
    !macroend
    之間的注釋符(即分號)刪除(若沒有這步究省了)。保存。
    接下來就可以在你自己的腳本中使用形式對話框了,并且支持 WinXP 的新的視覺效果樣式。

    6. 以下是我的示例腳本:

    引用來自  2005-12-7 上午 10:15:26 引用來自 2005-12-7 上午 10:15:26
    ////////////////////////////////////////////////////////////////////////////
    [color=#008000]; study.nsi
    ;
    ; 以下腳本用以生成 study.exe 文件
    ; 它包含有授權(quán)協(xié)議
    ;
    ; 安裝時若發(fā)現(xiàn)應(yīng)用程序正在運行,安裝程序會提示并替用戶關(guān)閉應(yīng)用程序
    ; 安裝成功后會自動運行應(yīng)用程序
    ;
    ; 啟用新的 Modern UI 的宏指令語法,原先的部分指令將被禁止以防止重復
    ; 我會盡量展示如何基本指令的用法。當然宏指令也會與一些基本指令發(fā)生重
    ; 復定義的情況,不過 NSIS 照樣能編譯成功.
    ; 其中的一些路徑、文件你可以根據(jù)需要更改

    ; 啟用外部壓縮工具(這里我們不用,原因看第 10 步)
    ;!define HAVE_UPX

    ; 若啟用了外部壓縮工具,這進行可執(zhí)行文件頭的壓縮
    !ifdef HAVE_UPX
    ; 用 UPX 壓縮可執(zhí)行文件頭(用其他的相關(guān)工具也行)
    !packhdr tmp.dat "E:UPX\upx --best tmp.dat"
    !endif

    ; 編譯選項

    ; 設(shè)置覆蓋標記
    SetOverwrite on
    ; 設(shè)置壓縮選項
    SetCompress auto
    ; 選擇壓縮方式
    SetCompressor bzip2
    ; 設(shè)置數(shù)據(jù)塊優(yōu)化
    SetDatablockOptimize on
    ; 設(shè)置數(shù)據(jù)寫入時間
    SetDateSave on

    ; 相關(guān)數(shù)據(jù)預(yù)設(shè)

    ; 軟件的名字,后面的${NAME}調(diào)用這個名字
    !define NAME "NSIS"
    !define NAME_FULL "全方位掌握 NSIS 的使用"
    !verbose 3
    ; 包含窗口消息定義文件
    !include "${NSISDIR}\Examples\WinMessages.nsh"
    ; 包含新界面的宏指令文件
    !include "${NSISDIR}\Examples\Modern UI\ModernUI.nsh"
    ; 包含標牌位圖宏指令文件
    !include "${NSISDIR}\Examples\branding.nsh"
    !verbose 4
    !define CURRENTPAGE $9
    !define TEMP1 $R0
    !define TEMP2 $R1

    ; 插入安裝界面宏定義(這里我禁用了,啟用也沒問題。編譯照樣通過。后面我都定義過了)
    ;!insertmacro MUI_INTERFACE "modern2.exe" "adni18-installer-C-no48xp.ico" "adni18-uninstall-C-no48xp.ico" "modern.bmp" "smooth"

    ; 安裝程序設(shè)置

    ; 輸出文件
    OutFile "F:\study.exe"
    ; 安裝程序名稱
    Name /LANG=2052 "NSIS"
    ; 替換對話框樣式
    ChangeUI all "${NSISDIR}\Contrib\UIs\modern2.exe"
    ; 啟用 WindowsXP 的視覺樣式
    XPstyle on
    ;設(shè)置字體
    SetFont 宋體 9
    ; 標題名稱
    Caption /LANG=2052 "全方位掌握 NSIS 的使用"
    ; 標牌的內(nèi)容
    BrandingText /LANG=2052 /TRIMCENTER "Shao Hao"
    ; 安裝程序圖標
    Icon "F:\12\QCDIcon.ico"
    ; 安裝程序顯示標題
    WindowIcon on
    ; 添加標牌位圖(放在頂部用 TOP 參數(shù)。后面接高度)
    AddBrandingImage LEFT 105
    ; 設(shè)定漸變背景
    BGGradient off
    ; 設(shè)置安靜安裝模式
    ;SilentInstall normal
    ; 設(shè)置安靜卸載模式
    ;SilentUnInstall normal
    ; 執(zhí)行 CRC 檢查(最好用 on 打開。關(guān)閉是因為還要修改安裝程序,看第 10 步)
    CRCCheck off
    ; 加載相應(yīng)的語言文件
    LoadLanguageFile "${NSISDIR}\Contrib\Language files\SimpChinese.nlf"
    ; 替換各個對話框標題的文字
    SubCaption /LANG=2052 0 "授權(quán)協(xié)議"
    SubCaption /LANG=2052 1 "安裝選項"
    SubCaption /LANG=2052 2 "安裝目錄"
    SubCaption /LANG=2052 3 "正在安裝"
    SubCaption /LANG=2052 4 "完成安裝"
    ; 替換默認按鈕的文字
    MiscButtonText /LANG=2052 "< 上一步" "下一步 >" "取消" "關(guān)閉"
    ; 替換“安裝”按鈕的文字
    ;InstallButtonText /LANG=2052 "安裝"
    ; 替換當文件無法被寫入時的警告窗的文字
    FileErrorText /LANG=2052 "無法寫入文件$\r$\n$0$\r$\n請確認文件屬性不是只讀且未被使用中!"

    ; 默認的安裝目錄
    InstallDir "$PROGRAMFILES\QCD 3"
    ; 如果可能的化從注冊表中監(jiān)測安裝路徑
    InstallDirRegKey HKLM \
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" \
    "UninstallString"

    ; 授權(quán)協(xié)議頁面
    LicenseText /LANG=2052 "NSIS 是免費軟件。安裝前請先閱讀以下協(xié)議條款" "我同意"
    ; 使用授權(quán)協(xié)議文本
    LicenseData /LANG=2052 "F:\12\License.txt"
    ; 設(shè)置授權(quán)協(xié)議頁面的背景色
    ;LicenseBkColor 000000

    ; 選擇要按安裝的組件
    ComponentText /LANG=2052 "現(xiàn)在將安裝 ${NAME_FULL}到您的計算機:" "請選擇安裝類型" "或選擇您希望安裝的組件"
    InstType "完全安裝(都在了)"
    InstType "典型安裝"
    InstType /LANG=2052 /CUSTOMSTRING=自定義?
    ;InstType /LANG=2052 /NOCUSTOM
    ;InstType /COMPONENTSONLYONCUSTOM
    CheckBitmap "${NSISDIR}\Contrib\Icons\modern.bmp"
    ; 替換顯示磁盤空間信息的文字
    SpaceTexts /LANG=2052 "所需空間:" "可用空間:"

    ; 提示用戶輸入目錄的文本
    ; DirShow hide
    ; 替換顯示選擇安裝目錄的文字
    DirText /LANG=2052 "請選擇 ${NAME} 的安裝路徑:" "選擇目錄用以安裝 ${NAME}:" "瀏覽..."
    ; 是否允許安裝在根目錄下
    AllowRootDirInstall false

    ; 安裝信息的顏色
    ;InstallColors 000000 FFFFFF
    ; 安裝進度條顯示方式
    InstProgressFlags smooth colored
    ; 完成后自動關(guān)閉安裝程序
    AutoCloseWindow true
    ; 顯示“顯示詳細細節(jié)”對話框
    ShowInstDetails hide
    ; 替換“顯示細節(jié)”按鈕的文字
    DetailsButtonText /LANG=2052 "顯示細節(jié)"
    ; 替換“完成”按鈕的文字
    CompletedText /LANG=2052 "已完成"

    ; 卸載程序設(shè)置

    ; 替換卸載程序的文字
    UninstallText /LANG=2052 "現(xiàn)在將從你的系統(tǒng)中卸載 ${NAME}:" "卸載目錄:"
    ; 卸載程序圖標
    UninstallIcon "F:\12\UnQCDIcon.ico"
    ; 替換卸載程序標題的文字
    UninstallCaption /LANG=2052 "卸載 ${NAME}"
    ; 替換卸載程序每頁按鈕的文字
    UninstallSubCaption /LANG=2052 0 ":確認"
    UninstallSubCaption /LANG=2052 1 ":正在刪除文件"
    UninstallSubCaption /LANG=2052 2 ":完成"
    ; 卸載程序顯示方式
    ShowUninstDetails hide
    ; 替換“卸載”按鈕的文字
    UninstallButtonText /LANG=2052 "卸載"

    ; 安裝程序內(nèi)容及其相關(guān)的回調(diào)函數(shù)

    ; 安裝程序內(nèi)容
    Section /e "!主要程序(必須安裝)" SecCore
    SectionIn 1 2 RO
    ; 設(shè)置輸出路徑,每次使用都會改變
    SetOutPath $INSTDIR
    ; 循環(huán)包含目錄下全部內(nèi)容
    File /r "F:\12\1\*.*"
    ; 只包含一個文件
    File "F:\12\gf.gif"
    ; 處理動態(tài)連接庫文件
    IfFileExists "$INSTDIR\1.dll" 0 NoFile1
    ; 取消組件注冊
    UnRegDll "$INSTDIR\1.dll"
    Delete "$INSTDIR\1.dll"
    NoFile1:
    File "F:\12\1.dll"
    ; 注冊組件
    RegDLL "$INSTDIR\QCDIconMgr.dll"
    ; 寫入軟件注冊鍵值
    WriteRegStr HKLM "Software\NSIS\NSIS" "" "$INSTDIR"
    ; 為 Windows 卸載程序?qū)懭腈I值
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "DisplayName" "NSIS(只用于移除)"
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "UninstallString" '"$INSTDIR\uninst.exe"'
    ; 寫入生成卸載程序(可多次使用)
    WriteUninstaller "$INSTDIR\uninst.exe"
    SectionEnd

    Section
    /e "擴展(可選)" SecUpdate
    SectionIn 1
    SetOutPath "$INSTDIR\Plugins"
    File "F:\12\qcdplus\Plugins\2.dll"
    File /r "F:\12\qcdplus\Plugins\3"
    SectionEnd

    SubSection
    /e "選項" SecOptions
    Section /e "創(chuàng)建桌面圖標" SecDesktopShortCut
    SectionIn 1 2
    SetOutPath "$INSTDIR\Plugins"
    CreateShortCut "$DESKTOP\NSIS.lnk" "$INSTDIR\gf.gif"
    WriteUninstaller "$INSTDIR\uninst.exe"
    SectionEnd

    Section
    /e "創(chuàng)建快速啟動欄圖標" SecQuickbarShortCut
    SectionIn 1 2
    SetOutPath "$INSTDIR\Plugins"
    CreateShortCut "$QUICKLAUNCH\NSIS.lnk" "$INSTDIR\gf.gif"
    WriteUninstaller "$INSTDIR\uninst.exe"
    SectionEnd

    Section
    /e "創(chuàng)建 NSIS 程序組" SecShortCutGroup
    SectionIn 1 2
    SetOutPath "$INSTDIR\Plugins"
    CreateDirectory "$SMPROGRAMS\NSIS"
    CreateShortCut "$SMPROGRAMS\QCD Player\gf.lnk" "$INSTDIR\gf.gif"
    WriteUninstaller "$INSTDIR\uninst.exe"
    SectionEnd
    SubSectionEnd

    Section
    "-Run"; 運行?
    ExecWait '"$INSTDIR\2.exe" -p'
    WriteINIStr "$INSTDIR\NSIS.ini" "2" "Language" "Chinese"
    Exec "$INSTDIR\2.exe"
    ExecShell open "$INSTDIR\漢化說明.htm"
    SectionEnd

    Section
    ""
    ;Invisible section to display the Finish header
    !insertmacro MUI_FINISHHEADER SetHeader
    SectionEnd

    ; 安裝程序初始化設(shè)置
    Function .onInit
    ; 發(fā)現(xiàn)有程序正在運行時提示退出后繼續(xù)運行
    loop:
    FindWindow $R0 "NSIS"
    IntCmp $R0 0 done
    MessageBox MB_OKCANCEL \
    "NSIS 正在運行。$\n點擊“確定”按鈕會關(guān)閉 NSIS 然后繼續(xù)安裝,點擊“取消”按鈕將退出安裝程序" \
    IDOK NoAbort
    Abort
    NoAbort:
    SendMessage $R0 1029 0 0
    ; 稍等后繼續(xù)檢測直至檢測不到或用戶選擇取消
    Sleep 444
    Goto loop
    done:
    ; 顯示 Logo 畫面
    SetOutPath $TEMP
    File /oname=qcd_logo.bmp "F:\12\logo.bmp"
    File /oname=magiclime.exe "${NSISDIR}\Bin\magiclime.exe"
    ExecWait '"$TEMP\magiclime.exe" qcd_logo.bmp'
    Delete "$TEMP\magiclime.exe"
    Delete "$TEMP\qcd_logo.bmp"
    ; 初始化標牌位圖
    !insertmacro BI_INIT $R0
    FunctionEnd

    ; 安裝程序主界面的相關(guān)文本
    Function SetHeader
    !insertmacro MUI_HEADER_INIT
    !insertmacro MUI_HEADER_START 1
    !insertmacro MUI_HEADER_TEXT 2052 "授權(quán)協(xié)議" "安裝 ${NAME} 之前,請認真閱讀一下授權(quán)條款."
    !insertmacro MUI_HEADER_STOP 1
    !insertmacro MUI_HEADER_START 2
    !insertmacro MUI_HEADER_TEXT 2052 "選擇組件" "請選擇你要安裝的組件."
    !insertmacro MUI_HEADER_STOP 2
    !insertmacro MUI_HEADER_START 3
    !insertmacro MUI_HEADER_TEXT 2052 "選擇安裝位置" "為 ${NAME} 選擇一個安裝目錄."
    !insertmacro MUI_HEADER_STOP 3
    !insertmacro MUI_HEADER_START 4
    !insertmacro MUI_HEADER_TEXT 2052 "安裝" "${NAME} 已經(jīng)安裝,請等待."
    !insertmacro MUI_HEADER_STOP 4
    !insertmacro MUI_HEADER_START 5
    !insertmacro MUI_HEADER_TEXT 2052 "完成" "安裝順利完成."
    !insertmacro MUI_HEADER_STOP 5
    !insertmacro MUI_HEADER_END
    FunctionEnd

    ; 初始化安裝程序?qū)υ捒虻娘@示文本
    Function .onInitDialog
    !insertmacro MUI_INNERDIALOG_INIT
    !insertmacro MUI_INNERDIALOG_START 1
    !insertmacro MUI_INNERDIALOG_TEXT 2052 1040 "如果你同意協(xié)議中的所有條款,選擇“我同樣”繼續(xù)安裝,如果你選擇了“取消”,安裝程序?qū)⒔K止,只有接受條款才能安裝 ${NAME}."
    !insertmacro MUI_INNERDIALOG_STOP 1
    !insertmacro MUI_INNERDIALOG_START 2
    !insertmacro MUI_INNERDIALOG_TEXT 2052 1042 "描述"
    !insertmacro MUI_INNERDIALOG_TEXT 2052 1043 "移動你的鼠標到組件上,便可以見到相關(guān)的描述."
    !insertmacro MUI_INNERDIALOG_STOP 2
    !insertmacro MUI_INNERDIALOG_START 3
    !insertmacro MUI_INNERDIALOG_TEXT 2052 1041 "目標文件夾"
    !insertmacro MUI_INNERDIALOG_STOP 3
    !insertmacro MUI_INNERDIALOG_END
    FunctionEnd

    ; 轉(zhuǎn)到下頁面時的處理
    Function .onNextPage
    !insertmacro MUI_NEXTPAGE_OUTER
    !insertmacro MUI_NEXTPAGE SetHeader
    ; 標牌位圖設(shè)置
    !insertmacro BI_NEXT
    FunctionEnd

    ; 轉(zhuǎn)到上一頁面時的處理
    Function .onPrevPage
    !insertmacro MUI_PREVPAGE
    ; 標牌位圖設(shè)置
    !insertmacro BI_PREV
    FunctionEnd

    ; 鼠標移到指定組件時的顯示處理
    Function .onMouseOverSection
    ; 用宏指令設(shè)置安裝自己的注釋文本
    !insertmacro MUI_DESCRIPTION_INIT
    !insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecCore} "安裝主應(yīng)用程序"
    !insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecUpdate} "安裝 NSIS 的更新或新增插件"
    !insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecOptions} "選擇 NSIS 的其他安裝選項,例如:創(chuàng)建快捷方式和應(yīng)用程序組的"
    !insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecDesktopShortCut} "在用戶的桌面上創(chuàng)建 NSIS 的快捷方式"
    !insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecQuickbarShortCut} "在用戶的快速欄里創(chuàng)建 NSIS 快捷方式"
    !insertmacro MUI_DESCRIPTION_TEXT 2052 ${SecShortCutGroup} "在用戶的開始菜單的程序中創(chuàng)建 NSIS 的快捷方式組"
    !insertmacro MUI_DESCRIPTION_END
    FunctionEnd

    ; 安裝成功完成后的設(shè)置
    Function .onInstSuccess
    ; 自己加吧:)
    FunctionEnd

    ; 放棄安裝時警告窗口的顯示信息
    Function .onUserAbort
    !insertmacro MUI_ABORTWARNING 2052 "你確定要推出 ${NAME} 的安裝嗎?"
    !insertmacro MUI_ABORTWARNING_END
    FunctionEnd

    ; 安裝程序標牌位圖列表
    !insertmacro BI_LIST
    !insertmacro BI_LIST_ADD "F:\12\Brand1.bmp" /RESIZETOFIT
    !insertmacro BI_LIST_ADD "F:\12\Brand2.bmp" /RESIZETOFIT
    !insertmacro BI_LIST_ADD "F:\12\Brand3.bmp" /RESIZETOFIT
    !insertmacro BI_LIST_END

    ; 卸載程序及其相關(guān)回調(diào)函數(shù)

    ; 卸載程序內(nèi)容
    Section "Uninstall"
    ExecWait '"$INSTDIR\12.exe" /un'
    ; 循環(huán)刪除文件直至刪除文件夾
    RMDir /r "$SMPROGRAMS\NSIS"
    UnRegDLL "$INSTDIR\2.dll"
    Delete "$INSTDIR\QCDIconMgr.dll"
    Delete "$INSTDIR\*.*"
    DeleteRegKey HKLM "Software\NSIS"
    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NSIS"
    MessageBox MB_YESNO|MB_ICONQUESTION \
    "是否連插件目錄也要刪除?$\n(若您要保留這些文件,請點擊下面的“否”按鈕)" \
    IDNO NoDelete
    ; 全刪光!!!
    RMDir /r "$INSTDIR"
    NoDelete:
    SectionEnd

    ; 定義卸載程序標牌位圖
    !define BI_UNINSTALL
    !include "${NSISDIR}\Examples\branding.nsh"

    ; 初始化卸載程序?qū)υ捒虻脑O(shè)置
    Function un.onInit
    ; 初始化標牌位圖
    !insertmacro BI_INIT $R0
    FunctionEnd

    ; 卸載程序主界面的相關(guān)文本
    Function un.SetHeader
    !insertmacro MUI_HEADER_INIT
    !insertmacro MUI_HEADER_START 1
    !insertmacro MUI_HEADER_TEXT 2052 "卸載 ${NAME}" "${NAME_FULL} 將從你的系統(tǒng)里移除."
    !insertmacro MUI_HEADER_STOP 1
    !insertmacro MUI_HEADER_START 2
    !insertmacro MUI_HEADER_TEXT 2052 "卸載" "${NAME} 正在被卸載,請等待."
    !insertmacro MUI_HEADER_STOP 2
    !insertmacro MUI_HEADER_START 3
    !insertmacro MUI_HEADER_TEXT 2052 "完成" "${NAME_FULL} 已從你的系統(tǒng)中移除."
    !insertmacro MUI_HEADER_STOP 3
    !insertmacro MUI_HEADER_END
    FunctionEnd

    ; 初始化卸載程序?qū)υ捒驎r的處理
    Function un.onInitDialog
    ; 自己加:)
    FunctionEnd

    ; 卸載程序轉(zhuǎn)到下一頁時的處理
    Function un.onNextPage
    !insertmacro MUI_NEXTPAGE_OUTER
    !insertmacro MUI_NEXTPAGE un.SetHeader
    ; 標牌位圖設(shè)置
    !insertmacro BI_NEXT
    FunctionEnd

    ; 卸載程序完成時的處理
    Function un.onUninstSuccess
    ; 再加^_^
    FunctionEnd

    ; 放棄卸載程序時的處理
    Function un.onUserAbort
    FunctionEnd

    ; 卸載程序標牌位圖列表
    !insertmacro BI_LIST
    !insertmacro BI_LIST_ADD "F:\12\UnBrand1.bmp" /RESIZETOFIT
    !insertmacro BI_LIST_ADD "F:\12\UnBrand2.bmp" /RESIZETOFIT
    !insertmacro BI_LIST_END

    ; 結(jié)束
    /////////////////////////////////////////////////////////////////////////////
    [/color]


    7.注意兩個標牌位圖列表宏指令必須放置到函數(shù)的后面,就像我編寫的那樣,安裝程序的標牌位
    圖列表放置到到所有安裝程序回調(diào)函數(shù)的后面;卸載程序的標牌位圖列表放置到所有卸載程序回
    調(diào)函數(shù)的后面。
    關(guān)鍵是要注意整體布局(這樣才不會看迷糊),當然若編譯不能通過,就要進行合適的調(diào)整。

    8. 使用指令:
    makensis /CD f:\study.nsi"
    進行編譯(這個示例腳本我沒試過-_-,若編譯無法通過只好自己動手研究研究了。我放出來只是用于參考學習)

    9. 還沒完—— NSIS 對多語言的支持還是不夠完美(注意:是完美——有點雞蛋里挑骨頭的味道)。
    我們繼續(xù):
      用 ExeScope (其他的資源編輯器也行,別說你沒有)打開生成的 study.exe 文件,找到對話框資源的 105 項目。你會發(fā)現(xiàn)有一塊很明顯的用以顯示標牌位圖的控件。因為 NSIS 在插件此控件時是使其保持于授權(quán)協(xié)議文件控件等高的,所以當使用用 modern2.exe 對話框模板時會與對話框頂部多出 45 的距離——不羅嗦了,總之根據(jù)需要搞得好看就行(別過火!)。順便提一下,NSIS 安裝目中的 Contrib\UIs 子目錄下提供了多種對話框模板,你可以自行選用(就是用
    ChangeUI 指令或用宏指令),甚至根據(jù)需要用資源編輯器修改模板資源。

    接著修改:找到 111 項,把里面的資源漢化掉(新的界面居然沒有對此對話框的多語言支持!這個對話框只有在大容量的安裝程序執(zhí)行時才顯示)。

    用 ExeScope 更新后,再用 Hex WorkShop 打開我問可憐的試驗品——study.exe,查找字符串“unpacking data: ”(沒引號的,你別瞎加。找不到別怪我 $_$)。找到后處理一下,用“正在解壓縮數(shù)據(jù):”
    替換(正好 8 個字符 Yeah!)。

    10. 現(xiàn)在我要說為什么不啟用 UPX 壓縮以及關(guān)閉 CRC 檢測:
    用 UPX 壓縮可執(zhí)行文件頭或啟用 CRC 檢測(起用的話就是打開了自校驗),我們的 ExeScope 就無用武之地了(除非你夠牛會動態(tài)跟蹤技術(shù)和反匯編把文件頭殼和自校驗去掉,否則還是關(guān)掉的好)。

    至此全部完工。

    若有任何語法難點,請參閱 NSIS 的幫助文件。內(nèi)有上千字的詳細說明(可能更多,我也沒統(tǒng)計過)。還有一些指令我沒有用上,因為那些不太可能用的上。

    這個示例腳本已能作出較佳的安裝程序界面,大家可以下載我為 QCD v3.40B35 做的安裝界面。

    有問題請跟貼。歡迎一起交流。

    出處:http://bbs.hanzify.org/bbs/cgi-bin/topic.cgi?forum=8&topic=1010

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲国产成人精品不卡青青草原| 久久www免费人成精品香蕉| 亚洲精品无码专区在线在线播放 | 免费国产真实迷j在线观看| **实干一级毛片aa免费| 91在线视频免费观看| 国产精品亚洲二区在线| 国产精品亚洲精品| 亚洲精品亚洲人成在线观看麻豆| 区久久AAA片69亚洲| 一区国严二区亚洲三区| 日韩高清在线免费看| 黄色片在线免费观看| 7x7x7x免费在线观看| 十八禁视频在线观看免费无码无遮挡骂过| 亚洲av无码一区二区三区天堂| 亚洲国产成人精品无码区在线秒播 | 国产91精品一区二区麻豆亚洲| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 男人扒开添女人下部免费视频| 亚洲人成网站在线播放2019| 亚洲国产成人综合| 亚洲国产日韩在线成人蜜芽 | 99麻豆久久久国产精品免费| 美女视频黄频a免费大全视频| 亚洲国产欧美日韩精品一区二区三区 | 国产成人综合久久精品亚洲| 亚洲乱亚洲乱妇24p| 亚洲日韩精品国产一区二区三区| 亚洲a∨无码男人的天堂| 亚洲国产精品综合福利专区| 亚洲精品乱码久久久久久下载 | 8x8×在线永久免费视频| 久9久9精品免费观看| 免费精品99久久国产综合精品| 日本道免费精品一区二区| 18禁在线无遮挡免费观看网站| 日本免费人成网ww555在线| 久久精品免费观看| 一级毛片aaaaaa免费看| 亚洲免费中文字幕|