9

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

在这个阶段,安装需要

  1. 安装程序使用特定的本地管理员帐户运行(在这种情况下,SharePoint 安装程序帐户是本地管理员)
  2. 用户帐户控制被禁用

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

我想删除要求 #2 并让安装程序正常运行,即使启用了 UAC 也是如此。

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

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

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

4

2 回答 2

7

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

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


来自WiXCustomAction元素文档,Impersonate属性

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

于 2012-10-20T11:18:23.760 回答
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

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

于 2014-08-13T08:41:14.767 回答