本文只是提供一种思想,没有其他意图。不过这只是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:\User\UserName\AppData\Local\VirtualStore\”文件夹下。该文件专门用于保存重定向内容的根文件夹。对于每一个被重定向的文件都在这个文件下的对应文件夹里找到。
这个文件夹下可以重定向的文件位置有:
%SystemRoot%
%SystemRoot%\System32\
%SystemRoot%\SysWoW64\
%SystemRoot%\Program Files\
%SystemRoot%\Program Files (X86)\
如同前面所说,这个技术只对部分兼容性程序起作用,因此同样也面临着问题。这种机制只能使用标准权限运行安装程序时才有用,对于使用管理员权限安装的程序没有用。
同样的注册表虚拟化也就好理解了!其重点保护的键是HKEY_LOCAL_MACHINE\Software。感兴趣的话可以到微软官方网站的TechNet Library查看相关技术文档。