查找所有用户的AppData目录

时间:2011-08-02 20:06:31

标签: c# .net

我的项目是一个更大项目的插件。较大项目中的错误会创建一个文件,导致我的应用程序崩溃。他们已经意识到了这个问题并正在解决它,但与此同时,唯一的解决方法是删除每个用户的appdata目录中的某个文件。

计划是在安装较小的插件时,导航到每个用户的appdata目录以删除有问题的文件(如果存在)。有没有办法找到每个用户的appdata目录。请记住这是一个安装,因此我们将拥有管理员权限。我见过的一些事情是使用

WindowsIdentity.Impersonate(IntPtr someUser)
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

然后它只是以某种方式获得IntPtr,我不确定如何获得。

这是我现在拥有的最佳解决方案。那么我如何获得每个用户的IntPtr?或者有更好的解决方案吗?

我能想到的下一个最好的方法就是遍历C:\Users\eachUser\AppData\的所有目录并删除存在的文件。但话说回来,在XP中,该位置必须是C:\Documents and Settings\eachUser\Application Data\,我将创建特定于操作系统的代码。建议?

1 个答案:

答案 0 :(得分:4)

来自WindowsIdentity.Impersonate Method (IntPtr userToken)

IntPtr userToken是......

  

Windows帐户令牌的句柄。此令牌通常通过调用非托管代码来检索,例如调用Win32 API LogonUser函数。

所以,除非你拥有所有的用户名和密码,否则你不能这样做。

编辑:为什么不在运行时为当前用户删除文件?你的插件是否有权这样做?

编辑2:您可以使用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)中的安装用户目录,然后使用Directory.GetDirectories查找具有配置文件的其他用户。然后,您可以使用特殊文件夹名称。非常圆,但它可能适用于你的“捏”。