在開始深入探討NSIS的語法之前, 我想先寫一篇文章來介紹我覺得在撰寫NSIS腳本語言時,
很重要的一個概念: Page 跟 Section。
 
***
Page:
     頁面,在這邊指的是我們在安裝過程中, 會看到的各個嚮導頁面, 包含一開頭的歡迎畫面,
   接連而來的授權條款頁面, 語言選擇畫面, 安裝路徑選擇頁面...等, 都是藉由Page的宣告
     來達成。
     
Section:
     區段, 每一個區段都是獨立的安裝組件,由Section開頭, 以SectionEnd做為此區段的結尾,
     通常我們要讓安裝程式做的事情都會寫在區段內。
 
*** 
那麼, 
(1) 我們如何知道安裝程式在進行到哪個頁面時, 會執行哪一個Section?
(2) 當某個Section執行完後, 接下來會執行哪個Section?
 
這是我初次接觸NSIS腳本語言不久後, 一度弄不清楚的疑問。而後來才慢慢理解: 實際上Page
跟Section之間的互動並不是我們一般寫程式時, 「在某處呼叫某個函式去執行某些動作」這樣
的概念,為了更具體說明,我們先從Page的使用方式看起:
 
Page license
Page components
Page directory
Page instfiles
 
上面是幾種常用到的頁面。 一旦我們在程式中宣告某個Page名稱, 在安裝過程中就會顯示該嚮
導頁面。如上圖所示, 安裝過程中共會顯示四個頁面, 分別是:
1. license頁面, 也就是我們常看到的授權條款頁面
2. componets頁面, 這邊就跟Section息息相關了, 在這頁面會讓使用者選擇要安裝哪些項目
    而這些項目其實就是我們所宣告的各個Section,換句話說, 我們宣告了幾個Section, 這邊
    就會有幾個項目可以選, 而安裝程式只會執行有被勾選的Section內容(預設是全選)
3. directory頁面, 這個頁面是讓使用者選擇要將軟體安裝到哪個位置
4. insfiles頁面, 當進到此頁面, 安裝程式就會開始依序執行使用者勾選的安裝項目
 
所以, 實際上的情形是:
> Page是只要有宣告, 就會顯示在安裝過程中, 不需要額外設定或撰寫其內容
> Section的執行都是當安裝程式進行到instfiles頁面時才會開始執行, 而
   (1) 有被勾選的Section才會執行
   (2) 程式中有定義的Section會在Components頁面顯示出來,讓使用者決定要不要安裝(執行)
        該區段
   (3) 各Section的執行順序是依照腳本語言裡的宣告順序, 由上而下依序執行
 
在下篇文章中, 我將會以一個結合Page跟Section的例子來介紹NSIS的使用, 讓大家對NSIS整體的
架構可以更有概念。
 
註1: 
當初在學寫NSIS時, 由於一直沒搞懂Page跟Section究竟是如何互動, 而導致即使爬找了網路上很
多文章我還是不懂究竟要怎麼樣才能寫出一個完整的安裝程式, 以達到我的需求。所以希望可能
會跟我碰到一樣瓶頸的朋友, 可以藉由這篇較快跨過這個學習門檻, 而專注於實現的細節上。     
 
註2:
通常在撰寫安裝程式時, 為了讓畫面更美觀, 不會直接使用預設的Page, 而會是以MUI介面這個擴
充套件來宣告各嚮導頁面, 後續我將會額外寫一篇文章來介紹MUI介面。
 
Reference:
 
 
arrow
arrow
    全站熱搜

    府低 發表在 痞客邦 留言(0) 人氣()