1. 程式人生 > >利用NSIS建立自己的windows安裝程式

利用NSIS建立自己的windows安裝程式

NSIS簡介

    NSIS 是“Nullsoft 指令碼安裝系統”(Nullsoft Scriptable Installation System)的縮寫,它是一個免費的 Win32 安裝、解除安裝系統,它的特點:指令碼簡潔高效;系統開銷小;當然進行安裝、解除安裝、設定系統設定、解壓檔案等等更不在話下,幾乎可以做所有的事情。更多的功能請閱讀官方文件。

工具
  • NIS Edit v2.0.3
  • NSIS v3.03
思路:

指令碼嚮導+修改程式碼=個性化安裝包

步驟:

1.安裝上面兩款軟體,啟動NIS Edit,在“檔案”選單中“新建指令碼:嚮導”->下一步”,如圖1:
圖片來自網上


2.設定應用程式資訊,如軟體名稱、版本、出版人等,如圖2。如果設定了應用程式網站,則安裝包會生成一個對應網址的“Internet 快捷方式”。
這裡寫圖片描述
3.設定程式選項,如安裝包圖示、安裝程式檔案、安裝包語言[這裡選“SimChinese”]、使用者圖形介面及壓縮方式等,選用預設值,也可以點選對應專案的按鈕或下拉選單更改設定,如下圖3
這裡寫圖片描述
4.設定安裝目錄及授權資訊,如圖4後“下一步”:
這裡寫圖片描述
5.選定程式檔案,即我們要打包的檔案,可以使用預設的“Mainsection”,也可以根據需要進行更改或新建組別,如果組比較多時,可以設定是否“允許使用者選擇要安裝的元件”,如圖5
這裡寫圖片描述
6.完畢後進行“新增檔案”操作,選定我們要打包的檔案,如圖6,完成自動後返回的圖5的介面,執行下一步操作。
這裡寫圖片描述

7.設定開始選單中資料夾名稱及快捷方式,這裡我們使用預設值,如圖7,按“下一步”:
這裡寫圖片描述
8.指定安裝後要執行的程式,同上用預設值並設定相關執行引數及描述,不想在安裝執行任何程式,則留空即可,如圖8
這裡寫圖片描述
9.這步是有關解除安裝程式的相關資訊,如解除安裝時的提示、解除安裝的圖示等,如圖9
這裡寫圖片描述
10.勾選“儲存指令碼”、“轉換檔案路徑到相關路徑”及“編譯指令碼”,如圖10
這裡寫圖片描述

問題解決方案

1.用NSIS做安裝程式,在解除安裝資訊提示部分出現亂碼
方案一
使用Notepad++編寫指令碼,編碼格式使用ANSI
方案二
編碼格式使用UTF-8(有BOM),在指令碼最前面加上Unicode true


2.使用相對路徑

Var PROJECT_PATH

Section “MainSection” SEC01

;獲取 $INSTDIR 的上一級目錄

GetFullPathName $0 ../../../

DetailPrint PROJECT_PATH

SetOutPath “$INSTDIR”

File “${PRODUCT_DIR_ROOT_NAME}\CapClient.bat”
SectionEnd

3.打包檔案移除不需要的檔案
這裡寫圖片描述
移除掉Bin/Interpreter目錄下的Linux,Unix目錄

File /r /x “Linux” /x “Unix” “${PRODUCT_DIR_ROOT_NAME}\Bin*”

4.解除安裝程式檢查當前程式是否在執行
下載FindProcDLL
放到C:\Program Files (x86)\NSIS\Plugins(軟體的安裝目錄)裡面

Function .onInit
FindProcDLL::FindProc “xxx.exe”
Pop $R0

IntCmp $R0 1 0 no_run

MessageBox MB_ICONSTOP “安裝程式檢測到 ${PRODUCT_NAME} 正在執行,請關閉之後再解除安裝!”

Quit
no_run:
FunctionEnd

5.檢測程式多次安裝,通過登錄檔的方式

Function .onInit
ClearErrors
ReadRegStr $UNINSTALL_PROG ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} “UninstallString”
IfErrors done

ReadRegStr $OLD_VER ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} “DisplayVersion”
MessageBox MB_ICONSTOP “檢測到本機已經安裝了 ${PRODUCT_NAME},請解除安裝後再安裝”
Quit
done:
FunctionEnd

6.解決win7解除安裝程式快捷方式解除安裝不徹底
建立快捷方式時

RequestExecutionLevel user
Section -AdditionalIcons

SetShellVarContext all
CreateShortCut “$SMPROGRAMS\Capsheaf\Website.lnk” “$INSTDIR\${PRODUCT_NAME}.url”
CreateShortCut “$SMPROGRAMS\Capsheaf\Uninstall.lnk” “$INSTDIR\uninst.exe”

SectionEnd

刪除快捷方式時

RequestExecutionLevel admin
Section Uninstall

SetShellVarContext all
Delete “$SMPROGRAMS\Capsheaf\Uninstall.lnk”
Delete “$SMPROGRAMS\Capsheaf\Capsheaf.lnk”

SectionEnd