我在.net 2.0中使用C#
我将我的程序数据保存在下面的文件中: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文件夹中自动创建任何文件。请讨论所有可能的方法来阻止这种情况。
发布于 2013-08-05 21:24:13
首先,问问你自己,这是否需要为所有用户全局保存?
如果它不是必须的,则将文件保存在应用程序数据中,您可以使用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)获取路径,它应该始终可靠地扩展到C:\Users\Username\AppData\Roaming\。但请注意,此路径对于每个用户都是唯一的。
如果你不得不这么做,那你就不走运了。没有可靠的方法来存储所有没有管理员权限(或UAC)的用户在任何Windows后XP上的应用程序数据,这不是非常麻烦的,就像将您的数据存储在公共用户中(这可能是可能的,也可能是不可能的,我现在无法检查)。
发布于 2019-11-28 03:50:46
解决这个问题的一种方法是使用Environment.SpecialFolder.CommonApplicationData位置,但有一些非常重要的注意事项&设置。
CommonApplicationData是
目录,用作所有用户使用的特定于应用程序的数据的公共存储库。
在另一个SO答案中给出了重要的要求和限制:https://stackoverflow.com/a/22107884/3195477
其中一部分是这样说的:
建议您的安装程序为您的共享存储创建C:\ProgramData的子目录。并且该子目录必须由安装程序给予许可的ACL。这就是向所有标准用户授予所需访问权限的原因。
否则,使用标准用户权限运行的程序仍然不能对所有用户平等地读/写该位置中的文件。
发布于 2016-08-05 00:31:57
在将一个非常旧的win32应用程序转移到Windows7和10时,我找到了解决此问题的方法。该程序写入C:\Program Files...但是操作系统自动更改了虚拟存储的路径。然而,数据库是全局所需的。通过将兼容模式更改为Windows95或XP SP2,并始终以管理员身份运行,数据库直接在C:\Program Files\etc中操作。
这有安全隐患,该盒子已从所有网络中移除,适配器被禁用等。
https://stackoverflow.com/questions/18059015
复制相似问题