【问题标题】:WIX - Getting Admin's AppData folder instead of Installing User's AppData folderWIX - 获取管理员的 AppData 文件夹而不是安装用户的 AppData 文件夹
【发布时间】:2017-11-30 23:21:22
【问题描述】:

我们有一个使用 WiX 工具集创建的安装程序,它需要运行升级以执行每台机器的安装,但还需要在当前用户的文件夹中删除一些内容(例如,安装程序日志、许可证信息),因为应用程序以后运行非升级时需要访问它们。

换句话说,我们在安装程序中使用 rundll32 启动几个功能,当安装程序由在 UAC 提示符中输入管理员凭据的非特权用户运行时,当我们的代码向系统询问本地AppData 文件夹路径我们得到的是管理员文件夹的路径,而不是安装用户。

我想这是有道理的,因为程序是在 Admin 的特权上下文中运行的。但我们确实需要安装用户的信息。不,我们不能让它成为纯粹的每用户安装。

当应用程序由提供管理员升级凭据的非特权用户安装时,有没有办法确定与原始非特权用户对应的文件夹区域。

谢谢。

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    如果您的字面意思是有代码调用 API 来获取文件夹,那么这通常是一个问题。例如,模拟不会加载用户的配置文件(如交互式登录那样),因此文件夹位置可能是意外的。

    您可以尝试一些方法,但我不知道它们是否有效:

    1. 将 [AppDataFolder] 属性传递到您的自定义操作中,看看它是否是您想要的。我认为这些文件夹位置在安装早期(提升之前)就已解决,因此可能是当前用户的位置。

    2. LogonUser 和 UserSid 属性引用当前交互式用户。您可能能够通过 ImpersonateLogedOnUser、ShGetFolderPath、注册表加载的变体获取路径,如下所述:

    How can I get the path of a Windows "special folder" for a specific user?

    【讨论】:

      【解决方案2】:

      我认为您使用 API 调用过于复杂了。安装后,无需权限即可再次运行安装程序。这可以通过使用弹性来触发,也可以通过激活设置键来强制修复。一旦安装程序再次运行,它就可以评估当前用户并重新安装每个用户的组件。

      也就是说,这种类型的行为通常被误解为损坏或烦人,因此另一种可能的模式是将这些文件安装在每个计算机的位置,并让您的应用程序在运行时将它们复制到每个用户的位置。

      【讨论】:

      • 谢谢,但您的建议不能很好地满足我们的需求。关键问题是安装是由特定用户执行的,但安装需要升级到管理员权限级别 - 但安装日志需要在用户区域中,以便如果运行的用户报告错误非特权,数据可用于错误报告子系统,因此发送给我们。我不想升级错误报告者。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 2023-03-03
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多