長期擔任微軟軟體工程師的 Raymond Chen 最近在 X 上回答了一位遊戲開發人員提出的一個有趣的復古技術問題。這位開發人員詢問了當年 Windows 95 在安裝設定的設計時,為什麼用到了三種不同的使用者介面:DOS、Windows 3.x、Win9x ?
Chen擁有 30 多年影響 Windows 開發經驗,他在「The Old New Thing」網站上回覆這個問題,他表示這個問題的答案,要遠比大家想的還複雜。
他表示,當年微軟預想 Windows 95 安裝程式的起點,可能是在 MS-DOS、Windows 3.1 和 Windows 95 這三個不同的環境下開始,因此決定了必須相容三種不同的系統環境。
要解決這個問題,有一種選擇方法是編寫三個獨立的 Windows 95 安裝程式:第一個用於從 MS-DOS 進行安裝,另一個用於從 Windows 3.1 進行安裝,第三個用於從 Windows 95 進行安裝。
不過,這不是一個令人滿意的選擇,因為基本上你是將相同的工作做了三次,然後給三種不同的環境使用,因此寫出的程式碼可能是3倍以上。
因此,他們覺得更好的選擇是只編寫一個版本(Windows 95)的安裝程式,並將其用於所有三個起點。
從 | 應用程式類型 | ||
---|---|---|---|
作業系統 | 16位元圖形使用者介面 | 32位元圖形使用者介面 | |
DOS系統 | • | ||
Windows 3.1 | • | • | |
Windows 95 | • | • | • |
那麼,假如將 Windows 95 安裝程式編寫為 MS-DOS 應用程式,因為向下相容的特性,所以這個DOS應用程式可以在所有三個平台上運行。真正做到只需編寫一個安裝程式的需求。
但是,這個解法有一個很大的問題,那就是這是一個文字模式的安裝程式,看起來很醜。對於一個全新的Windows作業系統平台,一開始安裝的時候看到這麼醜的介面,似乎不會給人留下什麼好印象。
那麼,另一個極端是可以將 Windows 95 安裝程式編寫為 32 位元 GUI 程序,但這意味著如果使用者從 MS-DOS 或 Windows 3.1 啟動後,必須「先安裝 Windows 95」,然後才能執行 這個 Windows 95 安裝程式,這似乎陷入了死循環。
再來是一個折衷辦法:讓 MS-DOS 安裝程式安裝 Windows 3.1 的最小版本,剛好足以支援 16 位元 GUI 安裝程式所需的功能。完成後,啟動 Windows 3.1 的迷你版本並執行 16 位元 GUI 安裝程式。
好的,現在我們有了安裝程式的三個部分(請參考下面的圖表)。
如果你從 MS-DOS 安裝,請使用第一個:它安裝 Windows 3.1 的微型版本,然後啟動到 Windows 3.1 以繼續下一步。
第二個部分的安裝程式以 16 位元 Windows 應用程式執行,可以是 Windows 3.1 的微型副本(如果使用者從 MS-DOS 升級)、Windows 3.1 的真實副本(如果使用者從 Windows 3.1 升級),或Windows 95 的真實副本(如果使用者從Windows 95 升級)。第二個安裝程式幾乎完成所有實際工作:它與用戶進行初始互動,收集有關如何安裝 Windows 95 的資訊,例如詢問要包括哪些可選組件,並進行硬體檢測以決定哪些驅動程式,然後將驅動程式和Windows 95 檔案複製到系統上,將舊設定遷移到新作業系統,並啟動到Windows 95。
第三個部分的安裝程式以 32 位元 Windows 應用程式運作。它在真實的Windows 95系統中運行,並執行一些需要操作即時運行系統的最後步驟,例如安裝印表機。
這就是為什麼 Windows 95 安裝實際上是三個包裝在一起的安裝程式,它允許將程式碼的單一副本用於所有三種安裝情境。
來源:devblogs.microsoft.com/oldnewthing
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!