http://www.bianceng.cn/Programming/net/201104/26176.htm
您可能遇到过下面的一种或多种情况:
• 您的应用程序写入Program Files ,Windows目录,或者系统根(一般是C盘)文件夹,但是您在这些地方并没有找到您的文件
• 您的应用程序写入Windows注册表,特别是HKLM/Software中,但是您没有看 到注册表进行了更新
• 您切换到了另一个帐户,并且您的应用程序没有办法找 到已写入Program Files,Windows目录,或者系统根(一般是C盘)文件夹的文件,或者找到 了这些文件的老版本
• 在启用或禁用用户帐户控制(UAC)后,您的应用程序都 没有办法找到Program Files或Windows目录中的文件
如果这些出现在了您的应用程序 中,都是由于UAC虚拟化的原因。下面所提供的信息为您介绍了所有关于发现这个应用程序兼 容性问题,解决方案,以及特殊兼容性问题的一些附加信息。
真正的问题:UAC 虚拟 化
在Windows Vista中,一般由管理员来运行应用程序。这样,应用程序可以自由的 读写系统文件和注册表的值。如果标准用户可以运行这些应用程序,那他们可能会由于没有 足够的权限而导致失败。Windows Vista通过重定向写入(以及后续文件或者注册表操作)对 应用户的配置文件(profile)位置,来对标准用户运行应用程序的能力进行了提升。
例如,如果一个应用程序试图写入C:\Program Files\Contoso\Settings.ini,并且用户 没有权限来对该文件夹进行写入操作,写入操作将会被重定向到C:\Users \Username\AppData\Local\VirtualStore\Program Files\Contoso\settings.ini。如果应用 程序试图在注册表中写入HKEY_LOCAL_MACHINE\Software \Contoso\,这将会被自动重定向到 HKEY_CURRENT_USER\Software\Classes\VirtualStore \MACHINE\Software\Contoso或 HKEY_USERS\UserSID_Classes\VirtualStore \Machine\Software\Contoso。
下图显示了Windows 虚拟化进程的两个组件:文件虚拟化和注册表虚拟化
重要注意
当为Windows Vista开发应用程序时,请确定在对应的requestedExecutionLevel元素 中嵌入应用程序清单文件。这将会关闭文件和注册表虚拟化,减少虚拟化的文件和注册表值 的复杂性。
更多关于UAC虚拟化和新UAC技术,请参阅“Windows Vista中的新 UAC技术”http://msdn.microsoft.com/en-us/library/bb756960.aspx .