C# 如何更改文件权限以阻止Vista写入VirtualStore目录中的文件?

C# 如何更改文件权限以阻止Vista写入VirtualStore目录中的文件?,c#,windows-vista,file-permissions,virtualstore,C#,Windows Vista,File Permissions,Virtualstore,当我的程序第一次安装时,它会在用户的AppData目录中放置一个文件,然后程序会定期写入该文件。问题是在Vista中,写入操作不会写入用户的AppData目录中的文件,而是写入“VirtualStore/ProgramData”目录中该文件的副本。用户的AppData目录中的原始文件从未更改,程序运行时似乎只能访问VirtualStore目录中的文件 是否有办法从C#应用程序内部更改该文件的权限,以便我的程序将写入AppData目录中的原始文件,而不是VirtualStore目录中的文件 谢谢

当我的程序第一次安装时,它会在用户的AppData目录中放置一个文件,然后程序会定期写入该文件。问题是在Vista中,写入操作不会写入用户的AppData目录中的文件,而是写入“VirtualStore/ProgramData”目录中该文件的副本。用户的AppData目录中的原始文件从未更改,程序运行时似乎只能访问VirtualStore目录中的文件

是否有办法从C#应用程序内部更改该文件的权限,以便我的程序将写入AppData目录中的原始文件,而不是VirtualStore目录中的文件

谢谢

Jeff

UAC文档应该可以帮助您解决这个问题

我觉得您需要添加应用程序清单

当应用程序包含指定了“requestedExecutionLevel”值的应用程序清单时,Vista对注册表和文件系统的虚拟化将被关闭

请看一看,了解具体情况


如果您以前没有在非管理员条件下测试过应用程序,您可能会发现在关闭Vista的虚拟化后需要进行一些代码更改。

您是按每台机器还是按用户安装程序?您的安装程序应用程序是否“提升”?以管理员身份运行?是,它以管理员身份运行。我知道我可以在安装文件时将其设置为允许完全访问,但不幸的是我没有这样做。所以现在用户有了一个文件,当程序运行时,它不会写入该文件,而是写入VirtualStore目录中的文件。现在我想关闭它。您可以,而且应该显示您的应用程序,以指示Windows禁用文件和注册表虚拟化。奇怪的是,万一不必要的话。允许用户在自己的
AppData\Local
AppData\Roaming
AppData\LocalLow
中写入文件。文件写入被虚拟化的唯一时间是首次写入失败且访问被拒绝;然后,Windows将以静默方式再次尝试。我想知道为什么不允许用户写入自己的appdata文件夹。我能想到的唯一原因是您正在运行受保护模式,或者有人修改了权限。我猜问题描述不正确<代码>应用数据通常应由当前用户写入。我认为这是一个缩写错误,
ProgramData
的意思是代替
AppData
。。。