2024.11.25 15:30

資深程式設計師表示當年設計 Windows 95 的安裝程式,微軟用到了三種不同的作業系統

ADVERTISEMENT

長期擔任微軟軟體工程師的 Raymond Chen 最近在 X 上回答了一位遊戲開發人員提出的一個有趣的復古技術問題。這位開發人員詢問了當年 Windows 95 在安裝設定的設計時,為什麼用到了三種不同的使用者介面:DOS、Windows 3.x、Win9x ?

Chen擁有 30 多年影響 Windows 開發經驗,他在「The Old New Thing」網站上回覆這個問題,他表示這個問題的答案,要遠比大家想的還複雜。

ADVERTISEMENT

他表示,當年微軟預想 Windows 95 安裝程式的起點,可能是在 MS-DOS、Windows 3.1 和 Windows 95 這三個不同的環境下開始,因此決定了必須相容三種不同的系統環境。

要解決這個問題,有一種選擇方法是編寫三個獨立的 Windows 95 安裝程式:第一個用於從 MS-DOS 進行安裝,另一個用於從 Windows 3.1 進行安裝,第三個用於從 Windows 95 進行安裝。

不過,這不是一個令人滿意的選擇,因為基本上你是將相同的工作做了三次,然後給三種不同的環境使用,因此寫出的程式碼可能是3倍以上。 

ADVERTISEMENT

因此,他們覺得更好的選擇是只編寫一個版本(Windows 95)的安裝程式,並將其用於所有三個起點。

應用程式類型
作業系統 16位元圖形使用者介面 32位元圖形使用者介面
DOS系統    
Windows 3.1  
Windows 95

那麼,假如將 Windows 95 安裝程式編寫為 MS-DOS 應用程式,因為向下相容的特性,所以這個DOS應用程式可以在所有三個平台上運行。真正做到只需編寫一個安裝程式的需求。

但是,這個解法有一個很大的問題,那就是這是一個文字模式的安裝程式,看起來很醜。對於一個全新的Windows作業系統平台,一開始安裝的時候看到這麼醜的介面,似乎不會給人留下什麼好印象。

ADVERTISEMENT

那麼,另一個極端是可以將 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 安裝程式。

ADVERTISEMENT

好的,現在我們有了安裝程式的三個部分(請參考下面的圖表)。

如果您從 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

 

 

ADVERTISEMENT