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

时间:2012-10-16 18:04:12

标签: wix uac wix3.6

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

在此阶段,安装需要

  1. 使用特定的本地管理员帐户(在本例中为SharePoint安装程序帐户,即本地管理员)运行安装程序。
  2. 禁用用户帐户控制
  3. 我真的无法绕过需求#1,因为如果托管操作在SharePoint安装程序帐户的上下文中运行,则只能执行某些步骤。

    我想删除需求#2,即使启用了UAC,安装程序也能正常运行。

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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


来自WiX CustomAction element文档, Impersonate属性

  

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

答案 1 :(得分: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

我希望您发现此信息有用,如果您共享自定义操作代码,我可能会提供更多帮助。