【问题标题】:Getting Application Data folder for every user为每个用户获取应用程序数据文件夹
【发布时间】:2011-11-12 20:41:17
【问题描述】:

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

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

【问题讨论】:

    标签: inno-setup uninstallation appdata


    【解决方案1】:

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

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

    【讨论】:

    • 我记得 Windows 徽标验证程序不允许在卸载后保留安装时创建的单个文件 -- 这是否已更改?
    【解决方案2】:

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

    您可以从 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 返回的字符串中。

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

    【讨论】:

    • 管理员用户可能没有必要访问用户文件夹(是的,他们可以强制对文件夹的权限并接管它)并且不会影响漫游配置文件。请注意,如果运行卸载的用户使用的是漫游配置文件,那么您也刚刚破坏了其他所有机器的设置。
    • 另外,本地用户文件夹可能被加密 - 那么就没有机会访问这些了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 2010-11-01
    • 1970-01-01
    • 2015-07-07
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多