Vista中创建、复制文件“拒绝访问”的权限问题

由于Vista系统对权限进行很大的限制管理。因此在程序的运行、升级过程中很容易出现“cannot create file ... 拒绝访问”等问题。这是因为程序运行、升级的过程中需要对exe、dll、bat等可运行文件进行操作,而这些文件可能是病毒,对系统具有较大的危险性,因而是vista严格控制的文件。

vista中还采用了所谓的“文件虚拟化”技术,往program files文件夹中复制数据时,都被虚拟到"C:/Users/User_name/AppData/Local/VirtualStore/Program Files/Application_name"中去了。因而刚刚复制、创建的文件都会找不到。给程序的调试带来了很大的问题。

那么如何避免这个问题呢?

一个简单的办法(不过不是微软推荐的)就是取消掉这种“虚拟化技术”:控制面板-->用户控制 --> 打开或关闭“用户权限控制”--> 取消掉UAC。

=============== 下面是微软的一篇官方文章:===============

2007-08-21 18:09

[前言]文件和注册表虚拟化可以帮助对注册表和文件系统只有受限访问权限的用户向这些受保护的区域写入内容。虚拟化会创建一个“每个用户”副本,然后重定向连续的数据操作。 例如,在受限用户帐户下或者在需要“用户访问控制”权限的帐户下运行应用程序。当此应用程序向系统位置(如 %programfiles% 文件夹)写入内容时,Windows Vista 会将写入操作和读取操作重定向到用户配置文件文件夹 (%localappdata%/VirtualStore) 中的用户特定位置。默认情况下,此位置为 C:/Users/User_name/AppData/Local/VirtualStore/Program Files/Application_name。注册表虚拟化的工作原理与之类似,但应用于 HKEY_LOCAL_MACHINE/SOFTWARE 子树下的注册表项。此子树下的注册表项和数据重定向到 HKEY_CURRENT_USER/Software/Classes/VirtualStore 子项。

症状

在使用 Windows Vista 的虚拟化功能时,可能会遇到下面所描述的文件和注册表虚拟化问题。

情形 1:安装、升级或使用应用程序时收到错误消息

在安装、升级或使用应用程序时,可能会收到各种表明拒绝访问的错误消息。例如,您可能会遇到下列症状之一:

•          在文件夹 %programfiles% 之外的其他文件夹中安装了应用程序后,会收到“拒绝访问”的错误消息。此外,该应用程序无法正常工作。

•          您收到类似于以下内容的应用程序错误消息:

Cannot create folder under C:/MyApp/Temp

Cannot create folder under C:/MyApp/Temp/output.dat

•          您收到类似于以下内容的错误消息:

写入 MyFile.exe 时出错

当您执行下列任一操作时,可能会出现此问题:

•          在虚拟位置创建链接。

•          使用加密文件系统 (EFS) 加密文件。

•          试图查看压缩文件。

•          使用命令提示符向一个虚拟位置复制 .exe、.sys 或 .dll 文件。

•          应用程序中需要文件输入或输出的部分不再正常工作。

情形 2:找不到刚创建的文件或文件夹

在使用已启用虚拟化的应用程序时,您在文件系统的虚拟位置创建了数据文件。当使用其他应用程序或 Windows 资源管理器访问这些新创建的文件时,却找不到这些文件。例如,如果在照片编辑应用程序中将某文件保存到 %programfiles%、%systemroot% 或 %programdata% 文件夹中,则找不到此文件。

情形 3:升级某个应用程序后遇到意外程序行为

在升级某个应用程序后,收到类似于以下内容的错误消息:

Error. Please upgrade your application

此外,该应用程序无法正常工作。应用程序似乎正在使用错误的或升级前的数据。

情形 4:在卸载应用程序之后,该应用程序的文件仍在计算机上

在这种情况下,您会遇到下列症状之一:

•          在其他应用程序中,您注意到已卸载应用程序的文件和文件夹信息仍存在于 %programfiles%、%programdata% 或 %systemroot% 文件夹中。

•          %userprofile%/AppData/Local/VirtualStore 文件夹比预期的大。在卸载应用程序时,未删除在该应用程序运行时创建的虚拟化文件。

原因

以下一种或多种情况可能会引起这些问题:

•          应用程序试图在某些指定的虚拟化文件夹之外创建文件或文件夹。

•          应用程序在 %programfiles% 文件夹中保存的文件可能指向用户虚拟存储文件夹以外的文件夹。

•          应用程序使用了一个虚拟化不支持的文件。

解决方案

情形 1

要确定是否存在情形 1 中描述的问题,请在事件查看器中查找 FileCreateVirtualExclude 事件。为此,请按照下列步骤操作:

1.         单击“开始”,在“开始搜索”框中键入 eventvwr,然后单击“程序”列表中的“eventvwr.exe”。如果系统提示您输入管理员密码或进行确认,请键入密码或单击“继续”。

2.         依次展开“应用程序和服务日志”、“Microsoft”、“Windows”和“UacFileVirtualization”,然后选择“Operational”。如果事件 ID 为 5000,则说明已发生 FileCreateVirtualExclude 事件。

要解决此问题,请使用下列方法之一:

•          如果该程序尚未安装在 %programfiles% 文件夹中,请将其重新安装在 %programfiles% 文件夹中。

•          使用具有管理凭据的帐户运行此应用程序。为此,请找到并右键单击该应用程序的快捷方式,然后单击“以管理员身份运行”。

如果系统提示您输入管理员密码或进行确认,请键入密码或单击“继续”。

•          在提升的命令提示符处运行该应用程序。为此,请按照下列步骤操作:

1.         单击“开始”,然后在“开始搜索”框中键入 cmd。

2.         在“程序”列表中,右键单击“cmd”,然后单击“以管理员身份运行”。

如果系统提示您输入管理员密码或进行确认,请键入密码或单击“继续”。

3.         键入 MyAppsPath/MyApp,然后按 Enter。MyAppsPath/MyApp 代表应用程序的路径和名称。

•          更改应用程序文件夹的安全设置。为此,请按照下列步骤操作:

1.         以具有管理凭据的用户身份登录,然后使用 Windows 资源管理器打开该应用程序的文件夹。

2.         右键单击该应用程序的文件夹,然后单击“属性”。

3.         在“安全”选项卡上,单击“编辑”。

如果系统提示您输入管理员密码或进行确认,请键入密码或单击“继续”。

4.         在“组或用户名”下,单击您的用户帐户。

5.         在“Users 的权限”下,对以下权限单击“允许”:

•          修改

•          读取和执行

•          列出文件夹目录

•          读取

•          写入

6.         单击“确定”。

情形 2

•          单击浏览器栏上显示的“兼容性文件”按钮,以查看该文件夹中的虚拟化文件。仅当该文件夹中存在虚拟化文件时,才显示“兼容性文件”按钮。

•          在 C:/Users/User_name/AppData/Local/VirtualStore 文件夹中查找文件和文件夹。

•          将应用程序的数据保存在用户配置文件下的文件夹中。

情形 3

警告:如果使用注册表编辑器或其他方法错误地修改了注册表,则可能会出现严重问题。这些问题可能需要重新安装操作系统才能解决。Microsoft 不能保证可以解决这些问题。修改注册表需要您自担风险。

•          在提升的命令提示符处运行该应用程序。为此,请按照下列步骤操作:

1.         单击“开始”,在“开始搜索”框中键入 cmd,然后在“程序”列表中单击“cmd.exe”。

如果系统提示您输入管理员密码或进行确认,请键入密码或单击“继续”。

2.         键入 MyAppsPath/MyApp。MyAppsPath/MyApp 代表该应用程序的路径和名称,然后按 Enter。

•          打开虚拟存储,然后删除原来的应用程序数据文件。为此,请使用 Windows 资源管理器打开 C:/Users/User_name/AppData/Local/VirtualStore/Program Files/MyApp 文件夹,然后删除您的文档或数据文件之外的所有文件。

•          从注册表中删除虚拟存储。

要在注册表中查找虚拟存储并删除所有不需要的注册表项,请按照下列步骤操作:

1.         单击“开始”,在“开始搜索”框中键入 regedit,然后在“程序”列表中单击“regedit.exe”。

如果系统提示您输入管理员密码或进行确认,请键入密码或单击“继续”。

2.         找到并单击下面的注册表子项:

HKEY_CURRENT_USER/Software/Classes/VirtualStore

3.         对于不再需要的任何应用程序注册表项,请右键单击该项,单击“删除”,然后单击“是”。

情形 4

要解决此问题,请使用 Windows 资源管理器打开 C:/Users/User_name/AppData/Local/VirtualStore/MyApp 文件夹,然后删除所有过时的应用程序数据。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值