我的项目是一个更大项目的插件。较大项目中的错误会创建一个文件,导致我的应用程序崩溃。他们已经意识到了这个问题并正在解决它,但与此同时,唯一的解决方法是删除每个用户的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\
,我将创建特定于操作系统的代码。建议?
答案 0 :(得分:4)
来自WindowsIdentity.Impersonate Method (IntPtr userToken):
IntPtr userToken是......
Windows帐户令牌的句柄。此令牌通常通过调用非托管代码来检索,例如调用Win32 API LogonUser函数。
所以,除非你拥有所有的用户名和密码,否则你不能这样做。
编辑:为什么不在运行时为当前用户删除文件?你的插件是否有权这样做?
编辑2:您可以使用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
中的安装用户目录,然后使用Directory.GetDirectories查找具有配置文件的其他用户。然后,您可以使用特殊文件夹名称。非常圆,但它可能适用于你的“捏”。