windows-7 - 如何防止文件重定向到 VirtualStore 来读/写文件?

标签 windows-7 c#-2.0 virtualstore

我正在使用 C# 和 .net 2.0

我将程序数据保存在以下文件中:C:\ProgramData\MyProgramName\fileName.xml

安装并运行我的应用程序一次后,我将其卸载(在卸载过程中,我从“程序数据”中删除了所有文件),然后重新安装了该应用程序,并运行了它。

奇怪的是,我的应用程序启动时就好像程序数据中的文件存在一样 - 意味着,即使数据文件已被删除,我的应用程序中也有旧数据。

运行时:

File.Exists("C:\ProgramData\MyProgramName\fileName.xml")

尽管我确信该文件不存在,但我得到了“true”。

当我以管理员身份运行应用程序时,事情变得很奇怪,然后文件不存在。

经过研究,我发现在没有管理员权限的情况下运行我的应用程序时,而不是得到:

C:\ProgramData\MyProgramName\fileName.xml

我明白了

C:\Users\userName\AppData\Local\VirtualStore\ProgramData\MyProgramName\fileName.xml

确实有一个文件存在于以前的安装中(我显然没有删除它,因为我不知道它存在)。

<小时/>

所以请指导我,当应用程序在没有管理员权限的情况下运行时,如何才能停止此操作。

我不想在 VirtualStore 文件夹中自动创建任何文件。请讨论阻止这种情况的所有可能方法。

最佳答案

首先,问问自己,是否需要为所有用户全局保存?

如果不需要,请将文件保存在应用程序数据中,您可以使用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)获取路径,它应该始终可靠地扩展为C:\Users\用户名\AppData\Roaming\。请注意,该路径对于每个用户来说都是唯一的。

如果你必须这么做,那你就运气不好了。在任何 Windows XP 后的 Windows 上,没有可靠的方法来存储所有没有管理员权限(或 UAC)的用户的应用程序数据,这不是非常 hacky,比如将您的数据存储在公共(public)用户中(这可能是可能的,也可能是不可能的,我可以'现在不要检查)。

关于windows-7 - 如何防止文件重定向到 VirtualStore 来读/写文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18059015/

相关文章:

关于最佳实践的 C# 神话?

c# - 获取存储在 VirtualStore 中的日志文件的真实路径

c# - 如何跳过 VirtualStore 并读取 Program Files 文件夹中的文件?

visual-studio-2008 - log4net - Appenders 在 IIS7.5 中不起作用

windows-7 - 为什么快捷方式调用的命令在Windows 7下的MFC中永远不会崩溃

c++ - 以编程方式检查数字签名

c# - 我只在 Windows 7 上得到 NullReference 异常的任何原因?

unit-testing - 如何在 Visual Studio 2005 中进行单元测试?

c# - (DataGridView + Binding)如何根据绑定(bind)的对象给线条上色?