我正在使用 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/