Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WIX-获取管理员';s AppData文件夹,而不是安装用户';AppData文件夹_Wix_Windows Installer - Fatal编程技术网

WIX-获取管理员';s AppData文件夹,而不是安装用户';AppData文件夹

WIX-获取管理员';s AppData文件夹,而不是安装用户';AppData文件夹,wix,windows-installer,Wix,Windows Installer,我们有一个使用WiX工具集创建的安装程序,它需要运行升级以进行每台机器的安装,但也需要在当前用户的文件夹中删除一些内容(例如,安装程序日志、许可证信息),因为应用程序需要在以后运行非升级时访问它们 换句话说,我们从安装程序中使用rundll32启动多个函数,当安装程序由一个非特权用户运行,该用户已在UAC提示符中输入管理员的凭据时,当我们的代码向系统询问本地AppData文件夹路径时,我们得到的是管理员文件夹的路径,而不是安装用户的路径 我想这是有道理的,因为程序是在管理员的特权上下文中运行的。

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

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

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

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


谢谢。

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

虽然我不知道这些方法是否有效,但您可以尝试以下几种方法:

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

  • LogonUser和UserSid属性指的是当前交互用户。您可能能够按照如下所述,使用ImpersonateLogedOnUser、ShGetFolderPath和注册表加载的变体获取路径:


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


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

    谢谢,但您的建议并不符合我们的需要。关键问题是安装是由特定用户执行的,但是安装需要升级到管理员权限级别-但是安装日志需要在用户区域中,这样,如果运行非特权的用户报告了错误,则错误报告器子系统可以使用数据,并因此发送给我们。我不想让臭虫报告员升级。