获取每个用户的Application Data文件夹

时间:2011-09-08 10:04:43

标签: inno-setup uninstall appdata

在我的应用程序中,每个用户都有自己的设置,我将其保存到该用户的Application Data目录中的子目录中。在卸载期间,我想删除计算机上每个用户的这些设置。我怎么能在Inno Setup中做到这一点?

换句话说,我需要为每个用户(而不是共享的Application Data目录)获取一个包含Application Data目录的列表,以便我可以从那里删除MyAwesomeApp目录。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:6)

你不能,due to the design of Windows。 相同的设计也会阻止您访问配置文件文件夹。

除此之外,最好的做法是将用户的数据留在后面,以防他们想要重新安装,漫游配置文件等。

答案 1 :(得分:2)

假设您的卸载程序以管理员权限运行,您只需获取User目录,然后枚举那里的所有用户目录。

您可以使用您想要的任何语言运行Inno Setup中的可执行文件。在其中,您可以使用SHGetSpecialFolderPath函数首先获取当前用户的Application Data目录。对于Win7来说,它看起来像这样:

c:\Users\MyUser\AppData\Roaming\

您可以使用GetUserName获取用户名(在本例中为MyUser),找到父目录并将字符串拆分为父目录“C:\ Users \”和“AppData \ Roaming \” 。然后,您可以使用FindFirstFile / FindNextFile枚举所有用户目录,并将第二部分“AppData \ Roaming”附加到它们,并检查该文件是否存在。通过拆分从SHGetSpecialFolderPath获得的目录,你可以确保它在XP中都可以工作(它会返回类似C:\ Documents和Settings \ MyUser \ Application Data的东西)和Win7。基本上你只需用所有用户的名字替换MyUser在SHGetSpecialFolderPath返回的字符串中。

我不知道这是否会避免操作系统安全性,或者它是否适用于漫游用户。