WIX - 获取管理员的AppData文件夹而不是安装用户的AppData文件夹

时间:2017-11-30 23:21:22

标签: wix windows-installer

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

换句话说,我们在安装程序中使用rundll32启动多个函数,当安装程序由已将管理员凭据输入UAC提示的非特权用户运行时,我们的代码会询问对于本地AppData文件夹路径的系统,我们获取Admin的文件夹路径,而不是安装用户。

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

有没有办法确定,当一个非特权用户安装了应用程序时,他们提供了管理员的升级凭据,这些文件夹区域对应于原始的,非特权的用户。

感谢。

2 个答案:

答案 0 :(得分:1)

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

虽然我不知道它们是否可行,但您可以尝试一些事项:

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

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

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

答案 1 :(得分:0)

我认为你已经过度使用API​​调用复杂化了。安装后,无需权限即可再次运行安装程序。这可以通过使用弹性来触发,或者可以通过激活设置键来触发以强制修复。安装程序再次运行后,它可以评估当前用户并重新安装每用户组件。

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