使用 Inno Setup 快速包裝 Windows 安裝檔

Inno Setup 是一套開源但功能強大且完整的 Windows 安裝程式,透過 Inno Setup 可以幫助我們將開發好的程式打包並壓縮成一個安裝檔,提供給使用者快速安裝;在打包成安裝檔的過程中我們會撰寫一些腳本來處理中間的安裝過程,因此在安裝的過程中是可以高度客製化的,今天就來快速看一下如何使用 InnoSetup 打包出一份安裝檔。

安裝 Inno Setup

可以到 Inno Setup 的網站下載程式的安裝檔,安裝完成後開啟 Inno Setup Compiler 即可開始。

使用精靈建立安裝程式

Inno Setup 提供兩種方式來建立腳本,一種是從頭開始自行撰寫,另外一種則是先提供精靈,讓我們快速針對常用的選項進行設定,設定完成後便會產生出對應的腳本程式碼,省去我們撰寫腳本的時間,因此我們可以直接選擇「Create a new script file using the Script Wizard」。

以下為使用腳本精靈設定的各個步驟說明。

Application Information

進入精靈後,會詢問我們基本的應用程式名稱、版本資訊、發布商資訊和網址等等,依照實際需求填寫就好。

Application Folder

接著會問我們要把程式安裝到哪裡;以及應用程式的目錄名稱。當然,這些目錄和名稱都是可以客製的。

Application Files

接下來要選擇執行檔的位置,以及是否要在複製一些其他的目錄、檔案等等到安裝目錄下;如果我們要安裝的程式有一個主要的執行檔位置,務必要在「Application main executable files」欄位設定,之後可以根據此檔案決定是否要再安裝完啟用,以及是否要建立桌面捷徑等設定。

如果有其他檔案要一起安裝,可以在下面的「Other application files」設定。

Application File Association

設定是否要關聯指定的附檔名,如果有設定,在指定的副檔名被開啟時,預設會使用我們寫好的主程式去開啟;如果程式沒有需要跟副檔名做相關,則直接跳到下一步。

Application Shortcuts

接著會問我們是否要幫程式建立各種捷徑,按照需要設定即可。

Application Documentation

在安裝過程中,我們可能需要使用者同意一些授權條款,以及安裝前後提示的文字訊息,可以在此步驟步驟設定。

若沒有,則一樣直接跳過進入下一步。

Setup Install Mode

在此步驟中,可以指定預設的安裝模式,預設選項是「Administrative install mode (install for all users)」,此模式會將程式安裝給電腦的所有使用者使用,當然就緒要較高的管理者權限。

也可以選擇「Non administrative install mode (install for current user only)」,代表指安裝給使用此安裝檔的使用者,因此只要目前的使用者權限足夠就可以了。

根據不同的選項,應用程式安裝的目錄也會有所不同;為所有使用者安裝的程式會放在 %ProgramFiles%%ProgramFiles(x86)% 目錄下;如果只安裝給目前的使用者,則會放在 %LocalAppData% 目錄下。

Setup Languages

選擇安裝檔可使用的介面語言,Inno Setup 內建多種語言,預設是沒有繁體中文的,之後再說明一下如何設定繁體中文的安裝檔。

Inno Setup Preprocessor

這個步驟可以選擇是否要將一些設定參數透過 #define 宣告成全域的變數,因為把共用的資料抽成變數了,之後要修改交本會比較簡單,建議這個步驟一定要勾選起來。

Compiler Settings

這個步驟設定的是將程式打包成安裝檔後,要存放在哪裡、檔案名稱、檔案 icon 和執行密碼。

檔案存放路徑是相對目錄,相對於腳本的存放目錄,如果沒有特別設定,預設為 Output

最後步驟

以上都設定完成後,腳本精靈會提示我們所有設定已經完成。

按下「Finish」,會開啟腳本編輯器,同時立刻問我們是否要立刻編譯成一個安裝檔。

當然,編譯前要先儲存腳本。

之後的安裝檔就會儲存在「Compiler Settings」設定的輸出目錄。

實際安裝過程

執行安裝檔後,可以看到常常看到的安裝畫面,包含前面設定的應用程式名稱、版本、以及預設安裝目錄。

在安裝前也可以選擇是否要建立桌面捷徑。

準備安裝,會將前面的設定都列出來預覽。

最後安裝完成,如果前面有設定主要執行程式的話,可以選擇在安裝完成後自動開啟應用程式。

解除安裝過程

在安裝過程中,會幫我們在安裝目錄裡面加入兩個檔案,分別是 unins000.datunins000.exe,這就是解除安裝的設定檔及執行檔。

當然,我們也可以在「新增/移除程式」中找到它並選擇解除安裝,也會實際執行 unins000.exe

解除安裝的畫面,也與一般應用程式解除安裝過程相似,沒什麼不同

腳本編輯畫面

Inno Setup 的腳本附檔名為 *.iss,可以使用 Inno Setup Compiler 程式開啟。

點擊上方的「Run (F9)」按鈕,可以即時編譯檔案並執行安裝檔。

在編譯、安裝過程,都會被記錄在畫面下方,方便我們除錯。

完整腳本範例

以下為這次示範產出的實際腳本,之後再來細部說明每段程式碼。

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "HelloWorld"
#define MyAppVersion "beta"
#define MyAppPublisher "FullstackLadder"
#define MyAppURL "https://fullstackladder.dev/blog/"
#define MyAppExeName "HelloWorld.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{557C0087-0AB3-4ED9-B1A4-3338C6AACC3B}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
DisableProgramGroupPage=yes
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputDir=Setup
OutputBaseFilename=HelloWorldSetup
SetupIconFile=C:\GitHub\hello-world\HelloWorldSetup\setup.ico
Compression=lzma
SolidCompression=yes
WizardStyle=modern

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\GitHub\hello-world\HelloWorldSetup\HelloWorld\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\GitHub\hello-world\HelloWorldSetup\HelloWorld\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

本日小結

Inno Setup 真的是非常方便及強大的應用程式安裝檔的產生器,透過精靈功能可以幫助我們快速的將應用程式編譯成一個安裝檔,同時許多細節都可以直接設定完成,也將解除安裝的過程都思考好了,讓我們能產出一個美觀的安裝程式,看起來專業度就是完全不同啊!

如果您覺得我的文章有幫助,歡迎免費成為 LikeCoin 會員,幫我的文章拍手 5 次表示支持!