WiX,UAC,管理自定义操作和模拟

Rap*_*ner 9 uac wix wix3.6

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

在此阶段,安装需要

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

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

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

我已经对这个问题进行了相当广泛的研究,但仍然无法使其发挥作用.我已经在我的软件包中设置了InstallScope ="perMachine",这似乎正确地提示UAC提升,但安装程序仍然因臭名昭着的2869错误而失败.

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

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

Ale*_*nov 5

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

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


WiX CustomAction元素文档中,Impersonateattribute

此属性指定在执行此自定义操作时,是否作为本地系统执行的Windows Installer应该模拟安装用户的用户上下文。通常,该值应为“是”,除非自定义操作需要提升的特权才能将更改应用于计算机

  • 我认为实际上是相反的。根据WIX文档:“此属性指定在执行此自定义操作时,是否应以LocalSystem身份执行的Windows Installer应该模拟安装用户的用户上下文。通常,该值应为'yes',除非需要提高自定义操作时。将更改应用于计算机的特权。” 因此Impersonate =“ no”表示您的操作以LocalSystem的身份运行,它对计算机具有完全访问权限,而Impersonate =“ yes”则表示您的自定义操作以安装用户的特权运行。 (6认同)
  • @AstralisSomnium尝试确保您的自定义操作确实在具有完全访问权限的情况下运行。Impersonate =“ yes”`仅对_deferred_动作有效。反过来,延迟的操作也没有完全访问安装属性的权限,您只能使用“ CustomActionData”。 (2认同)
  • 根据其他评论,您的方式是错误的。`Impersonate="no" ` 将以系统用户 (`NT AUTHORITY\SYSTEM`) 身份运行。请修改或删除您的答案 (2认同)