我使用WiX 3.6构建了一个Windows Installer程序包,它嵌入了自定义托管(C#)操作。
在此阶段,安装需要
我真的无法绕过需求#1,因为如果托管操作在SharePoint安装程序帐户的上下文中运行,则只能执行某些步骤。
我想删除需求#2,即使启用了UAC,安装程序也能正常运行。
我已经对这个问题进行了相当广泛的研究,但仍然无法使其发挥作用。我在我的软件包中设置了 InstallScope =“perMachine”,这似乎正确地提示UAC提升,但安装程序仍然因臭名昭着的2869错误而失败。
主要问题是我的自定义操作配置为 Impersonate =“yes”,因为它必须在当前用户的上下文中运行,而不是本地管理员帐户。当我在线搜索时,几乎所有“修复”都指向自定义操作中的 Impersonate =“no”,但这对我来说不是一个选项。
因此,我的问题是:有没有办法使用当前用户的身份运行自定义托管操作,而无需完全禁用UAC?
答案 0 :(得分:4)
当您使用Impersonate="yes"
自定义操作在没有管理权限的情况下运行时,使用当前登录用户的凭据。
在系统上下文中运行Impersonate="no"
自定义操作时。在系统上下文中运行时,自定义操作具有对系统的完全访问权限。
来自WiX CustomAction
element文档, Impersonate
属性:
此属性指定在执行此自定义操作时,作为LocalSystem执行的Windows Installer是否应模拟安装用户的用户上下文。通常,值应为“是”,,除非自定义操作需要提升权限以将更改应用于计算机。
答案 1 :(得分:2)
您在哪里引用自定义操作?
让.msi
以提升的权限运行可能还不够。
为确保您的自定义操作适用于提升的权限,您还必须使用延迟的自定义操作并在InstallExecuteSequence
中引用它。这可能无法解决您的问题,但在底部链接的文章详细介绍了msi安装过程中的UAC逻辑。
基本上,并非安装程序所做的一切都具有使用它的权限,您必须确保在安装程序使用提升的权限时运行自定义操作。
我希望您发现此信息有用,如果您共享自定义操作代码,我可能会提供更多帮助。