C# 从程序数据到AppData\Local\VirtualStore\ProgramData的文件重定向
我正在将C#与.NET3.5一起使用 我正在将程序数据保存在以下文件中:C:\program data\MyProgramName\fileName.xml 在安装并运行我的应用程序一次后,我卸载了它(在卸载过程中,我将从“程序数据”中删除所有文件) 然后我重新安装应用程序,并运行它 奇怪的是,我的应用程序启动时就好像程序数据中的文件存在一样——这意味着,即使数据文件被删除,我的应用程序中也有旧数据 运行时:C# 从程序数据到AppData\Local\VirtualStore\ProgramData的文件重定向,c#,windows,filesystems,programdata,C#,Windows,Filesystems,Programdata,我正在将C#与.NET3.5一起使用 我正在将程序数据保存在以下文件中:C:\program data\MyProgramName\fileName.xml 在安装并运行我的应用程序一次后,我卸载了它(在卸载过程中,我将从“程序数据”中删除所有文件) 然后我重新安装应用程序,并运行它 奇怪的是,我的应用程序启动时就好像程序数据中的文件存在一样——这意味着,即使数据文件被删除,我的应用程序中也有旧数据 运行时: File.Exists("C:\Program Data\MyProgramName\
File.Exists("C:\Program Data\MyProgramName\fileName.xml")
即使我确信该文件不存在,我还是得到了“true”
当我以管理员的身份运行应用程序时,事情变得很奇怪,然后文件就不存在了
经过研究,我发现当运行我的应用程序时,没有管理员权限,而不是获取:“C:\Program Data\MyProgramName\fileName.xml”,我会得到“C:\Users\userName\AppData\Local\VirtualStore\ProgramData\MyProgramName\fileName.xml”
事实上,在以前的安装中存在一个文件(我显然没有删除,因为我不知道它的存在)
显然,程序数据下有一些指向文件的虚拟路径
编辑:
我发现在删除虚拟存储中的旧文件后,我的应用程序突然能够找到正确的文件。(我没有在程序数据下的文件中做任何更改
我的问题是:
-应用程序数据的数据文件夹,如果用户配置文件正在漫游,则同步到域控制器上Environment.SpecialFolder.ApplicationData
-用于本地和未同步的应用程序数据的数据文件夹(例如,对于缓存非常有用)Environment.SpecialFolder.LocalApplicationData
var appData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
var myFolder = Path.Combine(appData, "MyApp");
if(!Directory.Exists(myFolder)) Directory.CreateDirectory(myFolder);
File.WriteAllText(Path.Combine(myFolder, "Test.txt"), "Test.");
这符合预期,即写入C:\ProgramData\MyApp\Test.txt
。据我所知(管理员模式命令提示符),UAC虚拟化也没有进行
双重编辑:
我猜发生的情况是,在某个时候,管理员用户已将文件写入您的ProgramData文件夹,因此,UAC文件系统虚拟化启动并将非管理员写入的文件重定向到VirtualStore
您的卸载程序是否以管理员身份运行?如果以管理员身份运行,您可能需要检查启动卸载的用户的
VirtualStore
路径,以及要删除的程序数据的实际文件系统路径。我不确定是否有正式的方法来执行此操作,不过…我找到了错误的原因
应用程序试图获取文件的所有权,然后创建另一个文件
我删除了这一行,现在一切正常。是的。我必须……所有用户之间都应该进行屏蔽。我正在使用Environment.SpecialFolder.ApplicationData获取正确的path@user844541--检查我的编辑。我想知道这是否与此有关。首先-谢谢!事实上,我有不止一个文件程序数据,但这是唯一被重定向的文件。关于你的猜测-听起来很合理,你指出了发生这种情况的一个很好的原因..我会做更多的研究..非常感谢/