NSIS 入門教程 (一)

水晶石發表於2024-06-22

介紹

大多數應用程式都附帶一個安裝程式,它將所需的檔案複製到正確的資料夾中,建立登錄檔項,並提供解除安裝例程以(希望)從計算機中徹底刪除應用程式有多種解決方案可以為自主開發的應用程式配備安裝程式。除了Install Shield或Wise等商業產品外,還有開源安

裝工具Nullsoft Scriptable Install System (NSIS)。在本教程中,我將展示使用 NSIS 建立安裝程式的一些簡單步驟

在第一部分中,將介紹一些基礎知識,然後我們建立了第一個真正的安裝程式。第二部分涵蓋解除安裝主題和安裝程式的其他對話方塊。在第三部分中,將為安裝人員提供了更現代的外觀

下載與安裝

NSIS 可以從 NSIS官方 下載。如果你感覺全英文介面不適應或者不符合你的操作習慣,也可以在 我的部落格 中下載簡體中文版本! 然後啟動下載的檔案,它會安裝 NSIS。一般情況下采用預設值完成安裝即可。



基礎與入門


NSIS 建立一個安裝檔案,其中包含所有要安裝的檔案和安裝指令碼。為此,您必須建立一個描述安裝步驟的 NSIS 指令碼。 NSIS 指令碼是一個普通的文字檔案,可以使用任何文字編輯器進行編輯。由於 NSIS 會在錯誤訊息中標定受影響的程式碼行,因此使用可以顯示行號的文字編輯器是必要的。

NSIS wiki有 專門針對 NSIS 的編輯器列表。我在本教程中 使用簡體中文版HM NISEdit

NSIS 指令碼檔案的副檔名為 .nsi。為了更好地閱讀瀏覽與維護,NSIS 指令碼還可以透過在標頭檔案中儲存函式或宏來分為多個檔案。標頭檔案副檔名叫 .nsh 然後在指令碼中使用 !include 命令以整合標頭檔案內容。

行註釋以分號“;”開頭,並在行尾結束。所有命令也在行尾結束。如果一個命令需要跨多行,必須在行尾新增一個反斜槓“\”。

Hello World!

我們建立的第一個“安裝程式”指令碼是著名的“Hello World”示例。為此,必須在文字編輯器中輸入以下文字:

Name "Hello World"
OutFile "helloworld.exe"
Section "Hello World"
MessageBox MB_OK "Hello World!"
SectionEnd

該文字現在儲存在檔名“helloworld.nsi”下。然後就可以啟動編譯器了。直接拖進編譯器(如果沒有 HM NIS Edit)或透過命令列執行下面的命令

makensis    "Hello World.nsi"

如果指令碼能夠編譯且沒有錯誤,則應該在指令碼資料夾中建立一個名為“helloworld.exe”的可執行檔案。啟動此應用程式後,會出現一個安裝程式視窗,上面會出現一個訊息框,訊息框內包含文字“Hello World!”

NSIS HelloWorld 安裝程式

使用命令說明:
Name
設定安裝程式的名稱。通常,它與應用程式的名稱相對應,例如“MyApp”。如果名稱包含一個或多個“&”,則必須在第二個引數中指定帶有雙重“&”的名稱,例如:
Name "Foo & Bar" "Foo && Bar"
OutFile
設定輸出檔案的名稱。還可以包含路徑,例如:
OutFile "C:\Temp\MyApp.exe"
Section

開始一個新區段。區段也可以是隱藏的、可選的或用於解除安裝程式。該區段由 SectionEnd 指令關閉。

MessageBox

顯示帶有指定選項(“顯示確定按鈕”)和指定文字的訊息視窗

第一個“真正的”安裝程式
要真正將某些內容寫入硬碟並不需要太多步驟:

Name "First Installer"
OutFile "Myapp.exe"
InstallDir $PROGRAMFILES\Myapp
Page directory
Page instfiles
Section ""
SetOutPath $INSTDIR
File C:\Windows\system32\notepad.exe
SectionEnd

我們已經從 HelloWorld 安裝程式中瞭解了 Name 和 OutFile 。InstallDir 設定預設安裝路徑。使用常量 $PROGRAMFILES 將指向系統已配置的程式資料夾。使用命令 Page 指定安裝程式中要顯示的頁面。在這種情況下,首先顯示安裝目錄查詢與設定對話方塊。然後是實際的安裝對話方塊,後面將在其中複製檔案。

在 Section 內部,使用 SetOutPath 確定並建立安裝資料夾。使用File指定要提取到安裝資料夾中的檔案。
展望
在後面的第二部分教程中,我們將使我們的安裝程式也能夠解除安裝程式。此外,我們還將檢視一些其他頁面,併為使用者提供選擇安裝特定部分的選項。
預計以後在第三部分中,我們將為安裝程式配備 ModernUI,使其具有更現代的外觀。