WiX、UAC、托管自定义操作和模拟

标签 wix uac wix3.6

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

在此阶段,安装要求

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

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

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

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

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

因此,我的问题是:是否有一种方法可以使用当前用户的身份运行自定义托管操作,而不需要完全禁用 UAC?

最佳答案

当您使用Impersonate="yes"时,您的自定义操作无需管理权限即可使用当前登录用户的凭据运行。

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

<小时/>

来自WiX CustomAction element文档,模拟属性:

This attribute specifies whether the Windows Installer, which executes as LocalSystem, should impersonate the user context of the installing user when executing this custom action. Typically the value should be 'yes', except when the custom action needs elevated privileges to apply changes to the machine.

关于WiX、UAC、托管自定义操作和模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12920767/

相关文章:

powershell - 使用 Powershell 禁用 UAC

Wix:是否有任何 wix 命令来创建数据库用户?

localization - 从 wix 中的 CustomAction 读取本地化字符串

wix - 使用 WIX - 基础版本 3 生成版本 1 或版本 2 的补丁吗?

c# - 我的 VS 2013 应用程序应该包含哪个 C++ 合并模块

wix - 如何在 Wix 刻录链中途安排重启?

uac - 了解 Windows Vista/7 上的 UAC

c# - 如何检测可执行文件是否需要 UAC 提升(C# pref)

WIX 错误 - ICE03 : Not a valid foreign key

wix - 自定义操作中的条件