本文只是提供一種思想,沒有其他意圖。不過這只是Windows相容方案的一種措施,肯定還有很多措施。感興趣的可以看看,把玩把玩。

聽見別人說起“虛擬化”,還以為是Xen、VMware、Hyper-v等虛擬化軟體提供的虛擬化技術。結果恰恰相反,今天聽到的虛擬化卻是Windows的檔案虛擬化和登錄檔虛擬化技術(按照微軟官方說明後面都使用“虛擬儲存(VirtualStore)”所代替。虛擬儲存也不能理解為虛擬磁碟(VHD,Virtual Hard Disk))。不過在這裡與其說它們是一種技術還不如說是一種思路。

我認為這種思路的核心就是如何保持Windows系統的整潔性和規範性。先別急說什麼是檔案虛擬化或者什麼是登錄檔虛擬化,先詳細說說這種技術的由來比較好。

整潔性和規範性,這兩個詞用在這裡都是我杜撰出來的,不過有沒有效大家看看再做評論。所謂的完整性就是指如何保持Windows系統目錄(%SystemRoot%)和關鍵目錄如“%SystemRoot%System32”、“%SystemRoot%SysWoW64”等不受到其他應用程式的改變,如應用程式向%SystemRoot%寫入(“寫入”操作的結果當然有可能是“覆蓋”)配置檔案或者dll(動態連結庫)檔案等。規範性是指提醒程式開發人員,不要設計一些與Windows系統開發理念或方法相忤逆的程式來破壞系統降低系統的可用性和可維護性,如不要設計將上述檔案寫入那些關鍵目錄中。Windows開發人員更希望應用程式也能實現多使用者的特性,即同一臺計算機中的不同的使用者使用不同的配置檔案而使得不同的使用者不會影響其他使用者的設定和資料,儘管現在大多數程式已經這樣設計。從剛才的這句話也可以看出這個技術其實只不過是處理相容性程式的一種方法。

那麼這種方法到底是如何實現的呢?答案很有意思,是檔案重定向。檔案重定向其實說起來並不複雜,就像快捷方式或者PowerShell中的快捷命令一樣,通過訪問連結檔案或目標檔案的別名(alias)就能真正的使用目標檔案或程式。

說這麼多概念有什麼用呢?倒也沒什麼用。現在最新的Windows7 Enterprise已經隱去了在資源管理器工具欄上的“相容性檔案”的按鈕,這讓它變得更加默默無聞起來。但如果使用者細心依然能發現它的存在。它就在“C:UserUserNameAppDataLocalVirtualStore”資料夾下。該檔案專門用於儲存重定向內容的根資料夾。對於每一個被重定向的檔案都在這個檔案下的對應資料夾裡找到。

這個資料夾下可以重定向的檔案位置有:

%SystemRoot%

%SystemRoot%System32

%SystemRoot%SysWoW64

%SystemRoot%Program Files

%SystemRoot%Program Files (X86)

如同前面所說,這個技術只對部分相容性程式起作用,因此同樣也面臨著問題。這種機制只能使用標準許可權執行安裝程式時才有用,對於使用管理員許可權安裝的程式沒有用。

同樣的登錄檔虛擬化也就好理解了!其重點保護的鍵是HKEY_LOCAL_MACHINESoftware。感興趣的話可以到微軟官方網站的TechNet Library檢視相關技術文件。