在我的应用程序中,每个用户都有自己的设置,我将这些设置保存到该用户的应用程序数据目录中的子目录中。在卸载期间,我想删除计算机上每个用户的这些设置。我怎样才能在 Inno Setup 中做到这一点?
换句话说,我需要为每个用户获取一个包含应用程序数据目录的列表(而不是共享的应用程序数据目录),以便我可以MyAwesomeApp
从那里删除该目录。有没有办法做到这一点?
在我的应用程序中,每个用户都有自己的设置,我将这些设置保存到该用户的应用程序数据目录中的子目录中。在卸载期间,我想删除计算机上每个用户的这些设置。我怎样才能在 Inno Setup 中做到这一点?
换句话说,我需要为每个用户获取一个包含应用程序数据目录的列表(而不是共享的应用程序数据目录),以便我可以MyAwesomeApp
从那里删除该目录。有没有办法做到这一点?
由于 Windows 的设计,您不能。同样的设计也会阻止您访问配置文件文件夹。
最重要的是,最好的做法是留下用户的数据,以防他们想要重新安装、漫游配置文件等。
假设您的卸载程序以管理员权限运行,您只需获取用户目录,然后枚举那里的所有用户目录。
您可以从 Inno Setup 运行以您想要的任何语言编写的可执行文件。在其中您可以首先使用SHGetSpecialFolderPath函数获取当前用户的应用程序数据目录。对于 Win7,它看起来像这样:
c:\Users\MyUser\AppData\Roaming\
您可以使用GetUserName获取用户名(本例中为 MyUser),并找到父目录并将字符串拆分到父目录“C:\Users\”和“AppData\Roaming\”。然后,您可以使用 FindFirstFile/FindNextFile 枚举所有用户目录,并将第二部分“AppData\Roaming\”附加到它们,并检查文件是否存在。通过拆分您从 SHGetSpecialFolderPath 获得的目录,您可以确保它可以在 XP(这将返回类似 C:\Documents and Settings\MyUser\Application Data")和 Win7 中工作。基本上,您只需将 MyUser 替换为所有用户的名称在 SHGetSpecialFolderPath 返回的字符串中。
我不知道这是否会避免操作系统安全性,或者它是否适用于漫游用户。