欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

Windows Vista 文件与注册表虚拟化技术的常见问题

(注:本文被 Microsoft TechNet 中文速递邮件 2008 年 07 月收录为 MVP 推荐 Blog  http://go.microsoft.com/?linkid=9285234) 
 
前几天在新闻组中看到有人问起 Windows Vista 的文件与注册表虚拟化技术,即为什么很多应该出现在 %ProgramFiles% 文件夹的程序会出现在 %LocalAppData%\VirtualStore 文件夹、为什么很多应用程序的注册表项会被映射到 HKEY_CURRENT_USER\SOFTWARE\Classes\VirtualStore。这些都是受到了 Windows Vista 的文件与注册表虚拟化技术的影响。
 
Windows Vista 的文件与注册表虚拟化技术可以使某些在旧版 Windows 中必须要求管理员权限的应用程序以非管理员的权限运行,有助于提升系统安全性。Windows Vista 会为每个用户帐户分别建立一套应用程序所需的文件与注册表副本。例如,假设某应用程序需要以管理员权限添加 %Program Files%\程序名称\设置.INI,在使用非管理员权限时,此文件就会自动重定向至 Users\%用户帐户名%\AppData\Local\VirtualStore\Program Files\程序名称\设置.INI;注册表也是一样,假设应用程序需要以管理员权限修改 HKEY_LOCAL_MACHINE\SOFTWARE\程序名\,在使用非管理员权限时,此注册表项就会自动重定向至 HKEY_CURRENT_USER\SOFTWARE\Classes\VirtualStore\MACHINE\Software\程序名\ 注册表项。本文附件的附图形象地说明了这一重定向(Redirect)的过程。
 
然而由于并非所有的应用程序都可以完美地支持 Windows Vista 的文件与注册表虚拟化技术,所以在实际应用中可能会遇到各种各样的疑难,常见的问题主要有:
 
1.某些应用程序可以以文件与注册表虚拟化方式运行,但需要重新定位通过此应用程序生成的文件。
 
假设某图像编辑程序可以以文件与注册表虚拟化方式运行,当我们在这个程序中将新图像文件保存至 %ProgramFiles%、%SystemRoot% 等位置后,通过资源管理器却无法在这些位置找到刚生成的文件。这时便可以到 Users\%用户帐户名%\AppData\Local\VirtualStore 文件夹搜索刚生成的文件。
 
2.某些应用程序可以以文件与注册表虚拟化方式运行,但其升级或卸载程序却不支持文件与注册表虚拟化。
 
这个问题常见于某些需要经常升级版本的旧版安全防护软件,这些安全软件能够以文件与注册表虚拟化方式运行,但在执行软件升级时却无法将更新的文件保存至 %LocalAppData%\VirtualStore 文件夹、也无法将更新的注册表项添加至 HKEY_CURRENT_USER\SOFTWARE\Classes\VirtualStore。这时,就可能会引起升级失败,或者虽然提示升级成功、但软件版本并没有提升的问题。解决这一问题的方法是以管理员的身份将更新的新文件及新注册表项手动添加至 %LocalAppData%\VirtualStore 文件夹及 HKEY_CURRENT_USER\SOFTWARE\Classes\VirtualStore 注册表项。
 
卸载的问题也是一样,某些应用程序虽然可以以文件与注册表虚拟化方式运行,但卸载时却无法自行删除 %LocalAppData%\VirtualStore 文件夹中的有关数据及 HKEY_CURRENT_USER\SOFTWARE\Classes\VirtualStore 中的有关注册表项,这时便需要以管理员的身份手动执行清理。
 
3.某些应用程序必须安装在 %ProgramFiles% 中才可以支持文件与注册表虚拟化技术。
 
如果某应用程序安装在非 %ProgramFiles% 文件夹外的其它文件夹时无法应用虚拟化技术、在安装或使用过程中经常出错,请将其重新安装至 %ProgramFiles% 文件夹。部分应用程序只有安装在 %ProgramFiles% 文件夹时才能被 Windows Vista 文件与注册表虚拟化技术支持。
 
4.某些应用程序完全无法以文件与注册表虚拟化技术正常运行。
 
如果我们在安装、升级或使用应用程序时遇到 FileCreateVirtualExclude 事件,即在事件查看器展开“应用程序和服务日志”-“Microsoft”-“Windows”-“UACFileVirtualization”-“Operational”发现事件 ID 为 5000 的 FileCreateVirtualExclude 事件,则表示这个应用程序可能部分或者完全不支持文件与注册表虚拟化技术,必须以管理员权限才能在 Windows Vista 中运行。具体的表现有:无法建立或者找到程序所需的文件夹或文件、写入/复制/加密/压缩某文件夹或文件时出错、应用程序因为无法访问所需的数据而经常提示未知错误,等等。
 
对于这样的不支持文件与注册表虚拟化技术的程序,我们就没有什么办法了,只能右键单击程序快捷方式,选择“以管理员身份运行”;或者以管理员权限启动 CMD 命令提示符、然后通过命令提示符运行此程序。
已发表 2008年7月20日 16:40 作者 alx-zj
Attachment(s): Windows Vista 文件与注册表虚拟化技术示意图.JPG

评论通知

如果您想在帖子更新时接到邮件通知,请先登录。这里

订阅帖子评论使用 RSS

评论

2008年7月21日 15:46 by ahpeng

# re: Windows Vista 文件与注册表虚拟化技术的常见问题

Vista仅对旧版应用程序应用UAC重定向。

如果manifest里指定应用程序安全级别,则不会应用UAC重定向。

另外,可以编辑组策略,禁用本机的UAC重定向

说说您的看法?

(必填) 
必填 
(必填)