【问题标题】:WiX, UAC, managed custom action and impersonationWiX、UAC、托管自定义操作和模拟
【发布时间】:2012-10-06 21:52:00
【问题描述】:

我使用嵌入了自定义托管 (C#) 操作的 WiX 3.6 构建了一个 Windows Installer 包。

在这个阶段,安装需要

  1. 使用特定的本地管理员帐户(在本例中为 SharePoint 安装程序帐户,即本地管理员)运行安装程序
  2. 用户帐户控制被禁用

我确实无法绕过要求 #1,因为托管操作只有在 SharePoint 安装程序帐户的上下文中运行时才能执行某些步骤。

我想删除要求 #2 并让安装程序在启用 UAC 的情况下正常运行。

我已经对这个问题进行了相当广泛的研究,但仍然无法让它发挥作用。我在我的包中设置了 InstallScope="perMachine",这似乎可以正确提示 UAC 提升,但安装程序仍然失败并出现臭名昭著的 2869 错误。

主要问题是我的自定义操作配置了 Impersonate="yes" 因为它必须在当前用户的上下文中运行,而不是本地管理员帐户。当我在线搜索时,几乎所有“修复”都指向自定义操作中的 Impersonate="no",但这不是我的选择。

因此,我的问题是:有没有办法以当前用户的身份运行自定义托管操作,而无需完全禁用 UAC?

【问题讨论】:

  • 也喜欢这个问题的答案。
  • 我正在尝试做同样的事情。我试图绕过它的方法是创建一个 EXE,它具有 app.manifest (stackoverflow.com/questions/3915370/…) 中所需的管理员权限。然后我将该 EXE 称为模拟用户 (stackoverflow.com/a/8828776/1203288) 的类型 2 延迟自定义操作。但是,这适用于我的机器,但我在其他机器上遇到问题:只要需要管理员在 app.manifest 中,它甚至不会在其他机器上运行。希望这能给你一个好的开始。

标签: wix uac wix3.6


【解决方案1】:

当您使用 Impersonate="yes" 时,您的自定义操作在没有管理权限的情况下运行,并使用当前登录用户的凭据。

Impersonate="no" 您的自定义操作在系统上下文 中运行。在系统上下文中运行时,自定义操作对系统具有完全访问权限。


来自WiX CustomAction element 文档,Impersonate 属性

此属性指定作为 LocalSystem 执行的 Windows 安装程序在执行此自定义操作时是否应模拟安装用户的用户上下文。通常,该值应为“是”,除非自定义操作需要提升权限才能将更改应用到机器

【讨论】:

  • 我这样做了,但是我的应用程序抛出了 System.UnauthorizedAccess 异常。当我拥有系统权限时,怎么会发生这种情况?
  • @AstralisSomnium 尝试确保您的自定义操作确实以完全访问权限运行。 Impersonate="yes" 仅对 deferred 操作有效。反过来,延迟操作无法完全访问安装属性,您只能使用 CustomActionData
  • 我认为实际上是相反的。根据 WIX 文档:“此属性指定作为 LocalSystem 执行的 Windows 安装程序在执行此自定义操作时是否应模拟安装用户的用户上下文。通常该值应为“是”,除非自定义操作需要提升将更改应用到机器的权限。所以 Impersonate="no" 意味着您的操作作为 LocalSystem 运行,它可以完全访问机器,Impersonate="yes" 意味着您的自定义操作以安装用户的权限运行。
  • 根据其他评论,你有这个错误的方法。 Impersonate="no" 将作为系统用户 (NT AUTHORITY\SYSTEM) 运行。请修改或删除您的答案
  • @wal 谢谢!我已经编辑了答案,还添加了来自 WiX 文档的引用。
【解决方案2】:

您在哪里引用自定义操作?

.msi 以提升的权限运行可能还不够。 为确保您的自定义操作与提升的权限一起使用,您还必须使用延迟的自定义操作并在 InstallExecuteSequence 中引用它。这可能无法解决您的问题,但底部链接的文章详细解释了 msi 安装期间的 UAC 逻辑。

基本上,并非安装程序所做的所有事情都带有权限,您必须确保安装程序使用提升的权限时运行自定义操作。

来源:http://blogs.msdn.com/b/rflaming/archive/2006/09/30/uac-in-msi-notes-when-general-custom-action-mitigation-fails.aspx

希望这些信息对您有用,如果您分享您的自定义操作代码,我可能会提供更多帮助。

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • 你说得对,对不起,编辑了一个更好的答案。我是新手,仍在学习如何使用 stackoverflow。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多